&& , || , and , or همگی برای انجام عملیاتهای منطقی استفاده میشوند، اما بین آنها تفاوتهایی در اولویت اجرا وجود دارد که میتواند بر روی نتیجه برنامه تأثیر بگذارد.عملگر
&& بررسی می کند که هر دو مقدار true باشند.عملگر
and مانند && عمل می کند اما با الویت پایین تر.عملگر
|| بررسی می کند که حداقل یکی از مقادیر true باشد.عملگر
or نیز مانند || عمل می کند اما با الویت پایین تر.مثال AND:
$a = true;
$b = false;
$result = $a && $b; // false
$result = $a and $b; // true
در هر دو مثال بالا قرار است که بررسی شود هر دو مقدار true باشند، اما چرا خروجی ها متفاوت اند؟
زمانی که از عملگر
&& استفاده می شود، بررسی می شود که $a و $b برابر true باشند. چنانچه یکی از آنها true نبود خروجی false می شود.اما همانطور که گفته شد عملگر
and نسبت به && الویت اجرا پایین تری دارد، یعنی ابتدا $result برابر $a قرار می گیرد و سپس and $b اجرا می شود.بیایید با استفاده از پرانتز دقیق تر نشان دهیم:
($result = $a) and $b;
مشخص است که
$result برابر $a قرار گرفته است و $a هم برابر true است، در نتیجه and $b تاثیری در نتیجه نخواهد گزاشت و خروجی همان true است.این مشکل را با گزاشتن پرانتز می توان حل کرد، چرا که پرانتز ها الویت های اجرا را تغییر می دهند:
$result = ($a and $b); // false
در مثال بالا ابتدا داخل پرانتز اجرا می شود و سپس
$result برابر نتیجه می شود.نتیجه می گیریم عملگر
= سریع تر از and اجرا می شود درصورتی که && سریع تر از = اجرا می شود.------
مثال OR:
$a = false;
$b = true;
$result = $a || $b; // true
$result = $a or $b; // false
در هر دو مثال بالا قرار است که بررسی شود حداقل یکی از مقادیر true باشند، اما چرا خروجی ها متفاوت اند؟
جواب سوال دقیقا مانند AND است.
زمانی که از عملگر
|| استفاده می شود، بررسی می شود که حداقل یکی از $a یا $b برابر true باشند. چنانچه هر دو آنها true نبود خروجی false می شود.اما همانطور که گفته شد عملگر
or نسبت به || الویت اجرا پایین تری دارد، یعنی ابتدا $result برابر $a قرار می گیرد و سپس or $b اجرا می شود.بیایید با استفاده از پرانتز دقیق تر نشان دهیم:
($result = $a) or $b;
مشخص است که
$result برابر $a قرار گرفته است و $a هم برابر false است، در نتیجه or $b تاثیری در نتیجه نخواهد گزاشت و خروجی همان false است.این مشکل را با گزاشتن پرانتز می توان حل کرد، چرا که پرانتز ها الویت های اجرا را تغییر می دهند:
$result = ($a or $b); // true
در مثال بالا ابتدا داخل پرانتز اجرا می شود و سپس
$result برابر نتیجه می شود.نتیجه می گیریم عملگر
= سریع تر از or اجرا می شود درصورتی که || سریع تر از = اجرا می شود.------
بهتر است در استفاده از عملگر ها دقت کنیم تا باعث ایجا مشکل در برنامه نشویم.
ترجیحا از عملگرهای
&& و || به جای and و or استفاده کنید.👤 AmirHossein
💎 Channel: @DevelopixPHP