PDA

View Full Version : سوال: متغیر با مقدار فالس و صفر نیز در isset برگردانده میشود؟



Ahmad06
دوشنبه 24 اسفند 1388, 02:51 صبح
سلام.
من برای یک متغیر یکسری شرط دارم که مثلا :

<?
if($var==2){
$response=false; //or $response=0;
}

if($var==1){
$response=true; //or $response=1;
}

if(isset($response)){
echo "Test.";
}
?>

در نمونه بالا حتی اگر var برابر با 3 هم باشد که اصلا در بالا مورد مقایسه نگردیده
باز شرط ما گویا مقداری را به عنوان برگشت حساب میکند. چرا ؟

و تنها راهی که من توانستم از این کار دوری شود این بود که به جای مقدار false و یا 0 ، اصلا متغیر
را تعریف نکنم. (در جایی که میخواهم متغیر بدون هیچ مقداری باشد و در isset به عنوان
بدون مقدار برگشتی به حساب بیاید.)

digitak
دوشنبه 24 اسفند 1388, 12:28 عصر
isset اصلا با مقدار کاری نداره . بلکه ثبت شدن یک متغیر رو بررسی می کنه
اگه متغیری که در isset معرفی می کنید قبلا ساخته شده باشه true برگشت داده میشه

payamsp
دوشنبه 24 اسفند 1388, 12:59 عصر
شما باید از تابع empty استفاده کنید

Ahmad06
دوشنبه 24 اسفند 1388, 14:09 عصر
جدا از isset و empty یک سوال دیگه ، وضعیت زیر به صورت پیش فرض چه چیزی را چک میکند ؟
ست شدن را چک میکند و یا خالی نبودن را ؟

<?
if($var){
echo "test".
}
?>

امیـرحسین
دوشنبه 24 اسفند 1388, 16:41 عصر
برای مشاهده رفتار توابع isset و empty، لینک زیر رو حتما ببینید:
PHP.net :: PHP type comparison tables (http://www.php.net/manual/en/types.comparisons.php)

payamsp
سه شنبه 25 اسفند 1388, 07:44 صبح
توی اون حالتی که شما نوشتید مقدار متغیر رو چک میکنه و با توجه به مقدار متغیر true یا false بر میگردونه ، همچنین اگر متغیر رو قبلا تعریف نکرده باشید باز هم false بر میگردونه .

digitak
سه شنبه 25 اسفند 1388, 12:01 عصر
جدا از isset و empty یک سوال دیگه ، وضعیت زیر به صورت پیش فرض چه چیزی را چک میکند ؟
ست شدن را چک میکند و یا خالی نبودن را ؟

<?
if($var){
echo "test".
}
?>

اگر مقدار $val برابر true باشه شرط اجرا میشه

funpatogh
سه شنبه 25 اسفند 1388, 13:28 عصر
isset صفر و فالس رو مقدار بر میگردونه اما if مقدار بر نمی گردونه

امیـرحسین
سه شنبه 25 اسفند 1388, 20:04 عصر
$array = array(
"",
false,
null,
0,
"0",
array()
);

foreach($array as $item) {
if(!$item) {
var_dump($item);
echo '<br />';
}
}

خروجی:
string(0) ""
bool(false)
NULL
int(0)
string(1) "0"
array(0) { }
یعنی همه مقادیر اون آرایه false هستند. تابع empty دقیقا خروجی بالا رو میده و تابع isset فقط وجود یا NULL بودن رو تست می کنه. یعنی فقط اگر متغیری تعریف نشده باشه یا برابر NULL باشه، مقدار False میده و کاری به مقدار متغیر نداره.

امیـرحسین
سه شنبه 25 اسفند 1388, 20:22 عصر
توی لینک زیر همه این توابع رو معرفی کرده و مقایسه کرده.
PHP.net :: PHP type comparison tables (http://www.php.net/manual/en/types.comparisons.php)