في هذا الدرس 6تصفّح المواضيع
يفحص التطابق الصارم (=== و!==) تطابق نوع البيانات والقيمة معاً، بينما تقوم المساواة المرنة (== و!=) بتحويل الأنواع تلقائياً قبل المقارنة.
- مع التطابق الصارم، نتيجة
42 === "42"هيfalseونتيجة0 === falseهيfalse. - في PHP 8.0+، تم إصلاح المقارنة المرنة
0 == "non-numeric"لتُرجعfalseبعد أن كانتtrueفي PHP 7. - اجعل استخدام
===و!==القاعدة الدائمة في جميع مقارنات كود PHP الخاص بك.
المقارنة 42 === "42" تُرجع false لاختلاف النوع بين رقم ونص، وفي PHP 8 تُرجع 0 == "hello" القيمة false.
<?php
var_dump(42 === 42);
var_dump(42 === "42");
var_dump(42 == "42");
var_dump(0 == "hello");
var_dump(0 === false);
إلى جانب معاملات المقارنة الترتيبية (< و> و<= و>=)، ينفذ معامل السفينة الفضائية <=> مقارنة ثلاثية الاتجاهات في تعبير واحد.
- يُرجع التعبير
$a <=> $bالقيمة-1عندما يكون الطرف الأيسر أصغر ($a < $b). - يُرجع التعبير
$a <=> $bالقيمة0عندما يتساوى الطرفان ($a == $b). - يُرجع التعبير
$a <=> $bالقيمة1عندما يكون الطرف الأيسر أكبر ($a > $b).
يُرجع معامل السفينة الفضائية -1 أو 0 أو 1 سواء مع الأعداد الصحيحة أو العشرية أو الترتيب الأبجدي للنصوص.
<?php
$lowVsHigh = 10 <=> 25;
$equalVals = 15 <=> 15;
$highVsLow = 90 <=> 40;
$strCompare = "apple" <=> "banana";
echo "10 <=> 25 : $lowVsHigh\n";
echo "15 <=> 15 : $equalVals\n";
echo "90 <=> 40 : $highVsLow\n";
echo "a <=> b : $strCompare\n";
تدمج المعاملات المنطقية التعبيرات الشرطية أو تعكسها، وهي: && (معامل العطف المنطقي)، و|| (معامل التخيير المنطقي)، و! (النفي)، وxor (أو الحصرية).
- تكون
$a && $bصحيحة فقط إذا كان الطرفان صحيحين؛ وإذا كان الأول خاطئاً يتم تخطي الثاني (تقييم مختصر). - تكون
$a || $bصحيحة إذا كان أحد الطرفين على الأقل صحيحاً؛ وإذا كان الأول صحيحاً يتم تخطي الثاني. - تكون
$a xor $bصحيحة فقط عندما يكون أحد الطرفين صحيحاً والآخر خاطئاً (وتعطيfalseإذا كان الطرفان صحيحين معاً).
لأن كلاً من $hasCard و$hasWallet يساوي true، فإن ($hasCard xor $hasWallet) تعطي false، بينما ($hasCard xor $isBanned) تعطي true.
<?php
$hasCard = true;
$hasWallet = true;
$isBanned = false;
var_dump($hasCard && !$isBanned);
var_dump($hasCard || $hasWallet);
var_dump(($hasCard xor $hasWallet));
var_dump(($hasCard xor $isBanned));
من أشهر الفخاخ البرمجية في PHP أن المعاملات اللفظية (and وor وxor) أولويتها أضعف من معامل الإسناد =، بينما المعاملات الرمزية (&& و||) أولويتها أقوى من =!
- في العبارة
$res = true && false;، يحسب PHP نتيجةtrue && falseأولاً فيُسندfalseللمتغير$res. - أما في العبارة
$res = true and false;، ينفذ PHP الإسناد($res = true)أولاً لأن=أقوى منand، فيظل$resمساوياً لـtrue! - استخدم دائماً المعاملات الرمزية
&&و||وتجنب المعاملات اللفظيةandوor.
بدون أقواس، تقوم العبارة $withWordAnd = true and false بإسناد true للمتغير أولاً قبل النظر إلى and false!
<?php
$withSymbols = true && false;
$withWordAnd = true and false;
$wrappedWord = (true and false);
var_dump($withSymbols);
var_dump($withWordAnd);
var_dump($wrappedWord);
استخدم المعامل الثلاثي $cond ? $a : $b للاختيار الشرطي المباشر، ومعامل إلفيس ?: للقيم الحقيقية، ومعامل دمج الفارغ ?? و??= للقيم الافتراضية الآمنة.
- المعامل الثلاثي المختصر
$val ?: "Fallback"يُرجع$valإذا كان صحيحاً منطقياً، أو البديل إذا كان فارغاً أو صفرياً (بما في ذلك0و""). - معامل دمج الفارغ
$val ?? "Fallback"يحتفظ بالقيم0و""وfalseولا يلجأ للبديل إلا إذا كان المتغير غير معرّف أوnull. - معامل إسناد الفارغ
$theme ??= "dark";يسند القيمة"dark"فقط إذا كان$themeغير معرّف أوnull.
لأن الصفر 0 قيمة خاطئة منطقياً، يستبدله المعامل 0 ?: 10 بالقيمة 10، بينما يحافظ المعامل 0 ?? 10 على الصفر لأنه لا يساوي null.
<?php
$zeroQty = 0;
$elvisResult = $zeroQty ?: 10;
$coalesceResult = $zeroQty ?? 10;
$timezone = null;
$timezone ??= "Asia/Riyadh";
echo "Elvis on 0: $elvisResult | ?? on 0: $coalesceResult\n";
echo "Timezone: $timezone\n";
تحدد أولويات المعاملات أي جزء من التعبير المركب ينفذه مفسر PHP أولاً عند عدم وجود أقواس.
- معامل الأسس
**والنفي المنطقي!لهما أولوية أعلى من الضرب*والقسمة/وباقي القسمة%. - معاملات المقارنة (
<و===و<=>) تُنفذ قبل&&، الذي يُنفذ قبل||، الذي يُنفذ قبل??. - في PHP 8.0+، تداخل المعاملات الثلاثية
? :بدون أقواس يطلق خطأً قاتلاً؛ لذا استخدم الأقواس الصريحة دائماً!
يُحسب الأس 2 ** 2 (4) أولاً ثم الضرب 5 * 4 (20) ثم الجمع (30)؛ ولأن && أقوى من || تُقيّم العبارة كـ (false && false) || true.
| الأولوية (من الأعلى للأدنى) | المعاملات | اتجاه التجميع | القاعدة الأهم |
|---|---|---|---|
| 1 (Highest) | ** | Right | Exponentiation runs before unary/math |
| 2 | !, (int), ++ | Right | Logical NOT and type casts |
| 3 | *, /, % | Left | Multiplication, division, modulo |
| 4 | +, - | Left | Addition and subtraction |
| 5 | <, <=, >, >= | Non-assoc | Relational comparisons |
| 6 | ==, !=, ===, !==, <=> | Non-assoc | Equality and spaceship |
| 7 | && then || then ?? | Left / Right | && binds tighter than || |
| 8 | ? : then =, ??= | Non-assoc / Right | Assignment happens after && / || |
| 9 (Lowest) | and, xor, or | Left | Word operators bind WEAKER than =! |
<?php
$calc = 10 + 5 * 2 ** 2;
$logic = false && false || true;
$explicit = false && (false || true);
echo "Calc: $calc\n";
var_dump($logic, $explicit);
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
تحدد أولويات المعاملات أي جزء من التعبير المركب ينفذه مفسر PHP أولاً عند عدم وجود أقواس. معامل الأسس ** والنفي المنطقي ! لهما أولوية أعلى من الضرب * والقسمة / وباقي القسمة %. معاملات المقارنة (< و=== و<=>) تُنفذ قبل &&، الذي يُنفذ قبل ||، الذي يُنفذ قبل ??. في PHP 8.0+، تداخل المعاملات الثلاثية ? : بدون أقواس يطلق خطأً قاتلاً؛ لذا استخدم الأقواس الصريحة دائماً!
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Comparison & Logic المقارنة والمنطق والأولويات
- أتقن معاملات المقارنة الصارمة والمرنة، ومعامل السفينة الفضائية، والمعاملات المنطقية، ودمج الفارغ، وجدول أولويات المعاملات في PHP 8.
- للمراجعة
- 02 Strict Identity vs Loose Equality Rules قواعد التطابق الصارم === مقابل المساواة المرنة ==
- المفهوم الأساسي لقسم قواعد التطابق الصارم === مقابل المساواة المرنة == في لغة PHP الحديثة.
- للمراجعة
- 03 Relational and Spaceship Comparisons المقارنات الترتيبية ومعامل السفينة الفضائية <=>
- الصياغة البرمجية والتطبيق العملي المباشر لقسم المقارنات الترتيبية ومعامل السفينة الفضائية <=>.
- للمراجعة
- 04 Logical AND OR XOR and NOT Operators المعاملات المنطقية && و || و xor و !
- قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم المعاملات المنطقية && و || و xor و !.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 PHP PHP
- PHP: Hypertext Preprocessor
- لغة البرمجة النصية على جانب الخادم لبناء تطبيقات الويب الديناميكية وواجهات البرمجة.
- للمراجعة
- 02 CLI CLI
- Command-Line Interface
- واجهة سطر الأوامر التي تتيح تشغيل ملفات PHP مباشرة عبر الطرفية.
- للمراجعة
- 03 FPM FPM
- FastCGI Process Manager
- مدير عمليات FastCGI عالي الأداء لمعالجة طلبات خادم الويب في PHP.
- للمراجعة
- 04 HTML HTML
- HyperText Markup Language
- لغة الترميز القياسية التي يولدها محرك PHP ويرسلها إلى متصفح العميل بعد التنفيذ.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم قواعد التطابق الصارم === مقابل المساواة المرنة == للتحقق من المخرجات.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم المقارنات الترتيبية ومعامل السفينة الفضائية <=> وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما نتيجة المقارنة المرنة 0 == "hello" في PHP 8.4 (مقارنةً بإصدار PHP 7 القديم)؟
أصلح الإصدار PHP 8.0 هذه المشكلة الشهيرة بحيث لم تعد النصوص غير الرقمية تتحول إلى صفر.
ما القيم الثلاث الممكنة التي يُرجعها معامل السفينة الفضائية ($a <=> $b)؟
يُرجع معامل السفينة الفضائية دائماً أحد الأعداد الصحيحة الثلاثة: -1 أو 0 أو 1.
لماذا تجعل العبارة $result = true and false; قيمة المتغير $result تساوي true؟
معامل الإسناد = أقوى أولوية من الكلمات and وor وxor، بينما الرمز && أقوى من =.
متى تكون نتيجة التعبير المنطقي ($a xor $b) مساوية لـ true؟
معامل الاختيار الحصري xor يشترط اختلاف القيمتين المنطقيتين ويعطي false إذا تطابقتا.
ما الفرق بين $count ?: 10 (معامل إلفيس) و $count ?? 10 (دمج الفارغ) عندما تكون $count = 0؟
يفحص ?: الصدق المنطقي، بينما يفحص ?? عدم كون القيمة null فقط.
ماذا تفعل تعليمة إسناد دمج الفارغ $role ??= "guest";؟
التعليمة $role ??= "guest" هي اختصار مباشر لـ $role = $role ?? "guest".
في التعبير المنطقي false && false || true، لماذا تكون النتيجة النهائية true؟
معامل الربط && يرتبط دائماً بأولوية أقوى من معامل التخيير ||.
ماذا يحدث في PHP 8 عند كتابة معاملات ثلاثية متداخلة بدون أقواس: $a ? $b : $c ? $d : $e ؟
منع PHP 8.0 تداخل المعامل الثلاثي بدون أقواس لمنع الأخطاء المنطقية الناتجة عن التجميع اليساري القديم.