PDA

View Full Version : یک نکته



maysamscript
شنبه 04 اسفند 1386, 20:03 عصر
سلام دوستان
ساعت ها وقتم گرفته شد تا فهمیدم که با عدد صفر نمیشه شوخی کرد به کد زیر توجه کنید:

if($s=="string") echo "string";حالا در دو صورت string چاپ میشه
اول زمانی که مقدار s برابر string باشه
دوم زمانی که زبانم لال مقدار s برابر صفر باشه
چون دیدم ممکنه شما هم به دام صفر گرفتار شوید این نکته را گفتم

musiox
شنبه 04 اسفند 1386, 22:00 عصر
از این === استفاده کن . حالا بگرد دنبالش ببین چرا ؟!

reza_22
یک شنبه 05 اسفند 1386, 01:00 صبح
خوب اگه اینجوری باشه که هست، یه باگ محسوب میشه !!!

maysamscript
یک شنبه 05 اسفند 1386, 08:40 صبح
منم فکر کنم میشه به عنوان یه باگ ازش نام برد

moohssenn
یک شنبه 05 اسفند 1386, 13:59 عصر
دوم زمانی که زبانم لال مقدار s برابر صفر باشه

البته این صفر باید integer باشه نه string

mehdi_kamari
یک شنبه 05 اسفند 1386, 22:44 عصر
به نظر من اگه تعریف نوع داده در PHP تکلیفش معلوم بشه این مشکل هم حل بشه .
اگه دقت کرده باشید همیشه توی ارسال یک فرو با مقدار صفر مشکل وجود داره . مثلا اگه Combo ای داشته باشیم که یکی از اونها صفر باشه و زمانی که بخوایم با یه چیزی مثل IF اون چک کنیم برای ما صفر رو به منزله FALSE بر میگردونه که یه خطای بزرگه .

mehdi_kamari
یک شنبه 05 اسفند 1386, 22:46 عصر
به نظر من اگه تعریف نوع داده در PHP تکلیفش معلوم بشه این مشکل هم حل بشه .
اگه دقت کرده باشید همیشه توی ارسال یک فرو با مقدار صفر مشکل وجود داره . مثلا اگه Combo ای داشته باشیم که یکی از اونها صفر باشه و زمانی که بخوایم با یه چیزی مثل IF اون چک کنیم برای ما صفر رو به منزله FALSE بر میگردونه که یه خطای بزرگه .

moohssenn
دوشنبه 06 اسفند 1386, 12:13 عصر
به نظر من اگه تعریف نوع داده در PHP تکلیفش معلوم بشه این مشکل هم حل بشه .

مگه معلوم نیست . شما میتونید داده ها رو تعریف کنید , تبدیل کنید و ....

mehdi_kamari
دوشنبه 06 اسفند 1386, 12:24 عصر
متاسفانه شما مجبور به تعریف نوع داده مثل دیگر زبانها نیستید . از طرفی شما نمی توانید داده ای رو در بالای کلاستون نوع بدید .

reza_22
دوشنبه 06 اسفند 1386, 13:41 عصر
به نظر من تنها راه جلوگیری از اینگونه موارد اینه که نوع متغیر ها را قبل از اینکه با یکدیگر مقایسه کنیم ،یکسان کنیم

mehdi_kamari
دوشنبه 06 اسفند 1386, 13:51 عصر
راستش من این کار هم کردم . به نظر میاد این یه باگ باشه که عدد صفر با مقدار FALSE برابری می کنه . در صورتی که باید نوع Boolean از نوع Integer کاملا تفکیک داده بشوند .

maysamscript
دوشنبه 06 اسفند 1386, 14:31 عصر
در صورتی که باید نوع Boolean از نوع Integer کاملا تفکیک داده بشوند .
عملگر === کارش همینه که نوع داده ها را هم چک می کنه.

mehdi_kamari
دوشنبه 06 اسفند 1386, 14:41 عصر
دوست عزیز این و میدونم ولی روی مقایسه صفر مشکل داره . مثل اینکه بخوای یه متغیر رو چک کنی ببینی صفر هست آره یا نه . اون موقع هست که خطا نشون داده میشه !

tabib_m
دوشنبه 06 اسفند 1386, 15:55 عصر
php در این زمینه، هیچ باگی نداره!

اینجا رو بخونید:
http://forum.majidonline.com/showthread.php?t=77143

mehdi_kamari
دوشنبه 06 اسفند 1386, 16:14 عصر
پس String صفر حساب میشود ولی توی یک TAG SELECT اگه یکی از Option ها صفر باشد و بخواهیم در ازای آن صفر داخل یک Switch عملی را انجام دهیم اون موقع هست که مشکل می خوریم .

و یک مثال بهتر اینکه اگه همون مقدار رو بخواهیم داخل DataBase بریزیم به ما Error خالی بودن Field میده و نمیشه صفر رو پاس کرد .

maysamscript
دوشنبه 06 اسفند 1386, 16:34 عصر
Option ها رو صفر قرار نده.
به قول یکی از اساتید صفر عدد چموشیه

mehdi_kamari
دوشنبه 06 اسفند 1386, 16:38 عصر
صفر که چموشه ولی باید یه راه داشته باشه

tabib_m
دوشنبه 06 اسفند 1386, 18:05 عصر
پس String صفر حساب میشود ولی توی یک TAG SELECT اگه یکی از Option ها صفر باشد و بخواهیم در ازای آن صفر داخل یک Switch عملی را انجام دهیم اون موقع هست که مشکل می خوریم .
نه!!
چرا باید به مشکل بر بخوری؟!؟؟
میتونی مثال بذاری؟

صفر هم چموش نیست :)

من فکر میکنم این مسئله توی php نه فقط دردسر ساز نیست، بلکه خیلی از کارها رو هم راحت میکنه.
شرح این قضیه رو هم به اندازه ی کافی توی تاپیکی که لینکشو گذاشتم دادم.

نهایت کار اینه که شما فقط و فقط از یک کاراکتر = بیشتر استفاده میکنی!

موفق باشید.

musiox
دوشنبه 06 اسفند 1386, 20:24 عصر
مسئله رو نپیچونین . از reg exp استفاده کن یا از "0" . دقت کن که ورودی های کاربر رشته هستن .

امید امرایی
چهارشنبه 08 اسفند 1386, 22:10 عصر
به نظر من تنها راه جلوگیری از اینگونه موارد اینه که نوع متغیر ها را قبل از اینکه با یکدیگر مقایسه کنیم ،یکسان کنیم


سلام

بله منم موافقم . بهتره به جای ایراد گرفتن به PHP برنامه اصلاح بشه در ضمن به قول دوستمون در این مورد طرح شده می شه از === استفاده کرد