يأخذ العامل قيمة أو أكثر وينتج قيمة جديدة: $a + $b يجمع، و$a . $b يربط النصوص، و$a && $b «و» منطقية، و$a === $b يقارن، و$i++ يزيد.
يعيد / عددًا عشريًا ما لم يقبل العدد الصحيح القسمة على الآخر دون باقٍ: 17 / 5 تساوي 3.4، و10 / 5 تساوي العدد الصحيح 2. وعندما تريد الجزء الصحيح فقط، استخدم intdiv(). التقريب مشروح في صفحة الرياضيات.
العوامل الحسابية
| العامل | الاسم | مثال | النتيجة |
|---|---|---|---|
+ | الجمع | 7 + 2 | 9 |
- | الطرح | 7 - 2 | 5 |
* | الضرب | 7 * 2 | 14 |
/ | القسمة | 7 / 2 | 3.5 |
% | باقي القسمة | 7 % 2 | 1 |
** | الأس | 7 ** 2 | 49 |
-$a | السالب | -7 | -7 |
باقي القسمة مفيد لعبارة «كل عنصر رقم N» ولفحص الزوجي والفردي. وتأخذ نتيجته إشارة الطرف الأيسر، والقسمة على صفر تطلق خطأً يمكنك التقاطه:
عوامل الإسناد
يخزّن = قيمة. ولكل عامل حسابي ونصي صيغة مركبة تحدّث المتغير في مكانه.
ينتمي ??= إلى عائلة عامل الدمج مع null. وهو لا يُسند إلا عندما يكون المتغير غير معيَّن أو null.
الزيادة والنقصان: ++ و--
تعيد $i++ القيمة الحالية، ثم تضيف 1. وتضيف ++$i 1، ثم تعيد القيمة الجديدة. لا يظهر الفرق إلا عند استخدام النتيجة في التعبير نفسه.
حيلة الأحرف هذه هي الطريقة التي تُولَّد بها غالبًا أسماء أعمدة جداول البيانات (A، B، ... Z، AA).
العوامل المنطقية: && و|| و! وxor
| العامل | صحيح عندما |
|---|---|
$a && $b | يكون كلاهما صحيحًا |
$a || $b | يكون أحدهما على الأقل صحيحًا |
!$a | تكون $a خاطئة |
$a xor $b | يكون أحدهما بالضبط صحيحًا |
$a and $b, $a or $b | مثل && و||، بأولوية أقل |
تقصر && و|| التقييم: لا يُقيَّم الطرف الأيمن عندما يحسم الطرف الأيسر النتيجة. وهذا ما يجعل isset($user) && $user->isAdmin() آمنة.
and مقابل &&: فخ الأولوية
ترتبط and وor بقوة أقل من =، لذا ففي الإسناد تُطبَّقان بعد تخزين القيمة. وهذا خطأ كلاسيكي:
الأولوية المنخفضة مفيدة في تعبير اصطلاحي واحد، $file = fopen($path, 'r') or die('Cannot open');، حيث تريد أن يحدث الإسناد أولًا. وفي كل مكان آخر، استخدم && و||.
العوامل النصية: . و.=
في PHP عاملان نصيان: يربط . نصين ("Grace" . " " . "Hopper") ويضيف .= إلى متغير ($html .= "<li>"). ولا يربط + النصوص أبدًا: "3" + "4" هي العدد 7، بينما "3" . "4" هي النص "34". تشرح صفحة النصوص الاستيفاء وعلامات التنصيص.
المقارنة وعامل المركبة الفضائية <=>
يقارن == بعد تحويل الأنواع، ويتحقق === من النوع أيضًا، ويعيد <=> القيمة -1 أو 0 أو 1، وهذا بالضبط ما تحتاجه دوال الترتيب. التفاصيل والجدول الكامل للمقارنة المرنة في صفحة عوامل المقارنة.
عوامل المصفوفات
+ على المصفوفات اتحاد: تفوز مفاتيح المصفوفة اليسرى، ولا تُضاف من اليمنى إلا المفاتيح المفقودة. وهذا يفاجئ من يتوقع أن يُلحق العناصر. يتحقق == من أزواج المفتاح/القيمة نفسها، ويشترط === أيضًا الترتيب والأنواع نفسها.
لإلحاق قائمة بأخرى، استخدم array_merge() أو صياغة النشر [...$a, ...$b].
أولوية العوامل
عندما يخلط التعبير بين عوامل، تطبّقها PHP بترتيب ثابت. هذه هي العوامل التي توقع المبرمجين في الخطأ، مع ما تطبعه PHP 8.3:
echo 2 + 3 * 4; // 14: * before +
echo (2 + 3) * 4; // 20
echo 2 ** 3 ** 2; // 512: right to left, 2 ** 9
echo -2 ** 2; // -4: ** before unary minus
echo "Sum: " . 2 + 3; // Sum: 5, since PHP 8 + runs before .
عند الشك، أضف أقواسًا. لا تكلّف شيئًا، ولن يحتاج قارئ السطر التالي إلى تذكّر الجدول.
الأسئلة الشائعة
ما الفرق بين and و&& في PHP؟
كلاهما «و» منطقية، لكن أولوية and أقل من =. لذا فإن $x = true and false; تخزّن true في $x (يحدث الإسناد أولًا)، بينما تخزّن $x = true && false; القيمة false. استخدم && و|| في التعابير وأبعد and/or عن عمليات الإسناد.
ماذا يفعل % في PHP؟
% عامل باقي القسمة: يعيد باقي قسمة الأعداد الصحيحة، لذا فإن 10 % 3 تساوي 1. وتأخذ النتيجة إشارة المعامل الأيسر (-7 % 3 تساوي -1). وللأعداد العشرية استخدم fmod()، ويطلق % 0 الخطأ DivisionByZeroError.
كيف أرفع عددًا إلى أس في PHP؟
استخدم العامل **: 2 ** 10 تساوي 1024. وهو تجميعي من اليمين، لذا فإن 2 ** 3 ** 2 تساوي 2 ** 9 = 512، ويرتبط بقوة أكبر من السالب الأحادي، لذا فإن -2 ** 2 تساوي -4. والدالة pow(2, 10) تفعل الشيء نفسه.
ما الفرق بين $i++ و++$i في PHP؟
كلاهما يضيف 1 إلى $i. تعيد $i++ (الزيادة اللاحقة) القيمة القديمة ثم تزيد، وتزيد ++$i (الزيادة السابقة) أولًا ثم تعيد القيمة الجديدة. وفي سطر مستقل، مثل خطوة حلقة for، لا فرق بينهما.