همونطور که میدونید توی PHP برای اپراتور OR دو نسخه وجود داره، وشاید کمتر کسی بدون که اینها دوتا از لحاظ طرز عمل تفاوتی ندارن، ولی اولویت عملیاتی متفاوتی دارن .(چند وقت پیش یه بحثی توی فروم iranphp.org مطرح شد در اینباره.)
به عبارتی خیلیها درست نمیتونن نتیجه این کد رو حدس بزنن :
<?php function someFunc(){ return true; } $x=false; $y= $x || someFunc(); $z= $x OR someFunc(); var_dump($y); var_dump($z);
پاسخ صحیح اینه که $y برابر true میشه و $z برابر false!!
حتی این میتونه بدتر بشه، که میگذارمش به عهده تخیلات خودتون!! دلیلش هم سادست. اولویت || از = (و به طور کلی همه اپراتورهای مشابه) بیشتره، و در نتیجه اول اجرا میشه، ولی اولویت OR کمتر از = هستش و اول $x رو به $z نسبت میده، و در صورتی که نتیجه false باشه، فقط تابع someFunc فراخوانی میشه و بازگشتیش هم اصلا حساب نمیشه.
تو حالتی که $x برابر true باشه هم، موضوع خیلی بامزه تره :) توی خط $z= …. اصلا تابع فراخوانی نمیشه :))
این درباره اپراتورهای AND و && هم صادقه.
امتحانش کنید. جدول اولویت عملیاتی عملگرها در PHP رو ببینید.
ممنون از بچه های فروم ایران پی اچ پی….