PDA

View Full Version : گفتگو: يك نكته مهم در php



h.emamie
یک شنبه 12 دی 1389, 12:22 عصر
امروز موقعي كه داشتم روي يك پروژه كار مي كردم ، به يك نكته مهم برخوردم ، و اون نكته در كد زير نهفته است :


if('abc'==0)
{
echo 'True.';
}
else
{
echo 'False.';
}

به نظر شما نتيجه اجراي كد چيست ؟!


True

اولش براي خودم هم گيج كننده بود ، ولي خوب كه فكر كردم ، به ان نتيجه رسيدم كه برروي رشته abc به صورت داخلي تابع intval اجرا مي شود و چون نتيجه آن 0 است ، نتيجه True مي شود .

البته فكر نمي كنم اين باگ باشد و به نظرم بيشتر مربوط به انعطاف پذيري متغيرها در php است ولي در كل براي هر برنامه اي در صورت رعايت نكردن مي تواند يك خطر و يك باگ محسوب شود .

بهترين راه حل در اين موارد استفاده از === به جاي == است .



if('abc'===0)
{
echo 'True.';
}
else
{
echo 'False.';
}

نتيجه :

False

خوشحال مي شوم نطرات بقيه دوستان رو هم بدونم.

maysam.m
یک شنبه 12 دی 1389, 14:12 عصر
abc که یک متغیر نیست! اگر اینطوری بود $abc دیگه مشکلی نداشت!

h.emamie
یک شنبه 12 دی 1389, 16:08 عصر
من هم نگفتم abc يك متغيره ، بلكه نكته اصلي كه جاي ابهام داره اينه كه از نظر php مقدار رشته 'abc' با عدد 0 برابر فرض مي شود و حتي اگر مقادير در داخل متغير هم باشند بازهم اين شرط توسط php درست مي باشد و در واقع يك عبارت True .

MSN_Issue
یک شنبه 12 دی 1389, 16:22 عصر
فکر کنم این به این خاطره که تابع intval اگه نتونه پارامتر ورودیش رو به int تبدیل کنه ، مقدار صفر بر میگردونه !

funpatogh
یک شنبه 12 دی 1389, 19:45 عصر
چون شما دارید یک رشته را با یک اینتجر مقایسه میکنید بنابراین اون رشته به int تبدیل میشود که چون رشته با عدد شروع نمیشود مقدار 0 برایش در نظر گرفته میشود
حال اگر اول اون رشته یک عدد بگزارید نتیجه عکس خواهد شد


if("2abc"==0)
echo true;
else
echo false;