ما هو؟: في PHP 5.3؟ [مكرر
-
23-09-2019 - |
سؤال
تكرار ممكن: ما هي مشغلي PHP "؟" و ":" دعا وماذا يفعلون؟
من عند http://twitto.org/
<?PHP
require __DIR__.'/c.php';
if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
throw new Exception('Error');
$c();
?>
يستخدم Twitto العديد من الميزات الجديدة المتاحة اعتبارًا من PHP 5.3:
- ال دير ثابت
- ؟: عامل
- وظائف مجهولة
ماذا يفعل الرقم 2 مع ?: في PHP 5.3؟
أيضا ، ماذا يعنيون من خلال وظائف مجهولة؟ ألم يكن هذا شيء موجود لفترة من الوقت؟
المحلول
?:
هو شكل من أشكال المشغل الشرطي الذي كان متاحًا سابقًا فقط على النحو التالي:
expr ? val_if_true : val_if_false
في 5.3 من الممكن ترك الجزء الأوسط ، على سبيل المثال expr ?: val_if_false
وهو ما يعادل:
expr ? expr : val_if_false
من كتيب:
منذ PHP 5.3 ، من الممكن ترك الجزء الأوسط من المشغل الشرطي. تعبير
expr1 ?: expr3
عائداتexpr1
لوexpr1
يقيمTRUE
, ، وexpr3
غير ذلك.
نصائح أخرى
ال ?:
المشغل هو المشغل الشرطي (يشار إليها غالبًا باسم المشغل الثلاثية):
التعبير
(expr1) ? (expr2) : (expr3)
يقيمexpr2
لوexpr1
يقيم صحيح, ، وexpr3
لوexpr1
يقيم خاطئة.
في حالة:
expr1 ?: expr2
يقيم التعبير إلى قيمة expr1
لو expr1
هو حقيقي و expr2
غير ذلك:
منذ PHP 5.3 ، من الممكن ترك الجزء الأوسط من المشغل الثلاثي. تعبير
expr1 ?: expr3
عائداتexpr1
لوexpr1
يقيم صحيح, ، وexpr3
غير ذلك.
منذ PHP 5.3 ، من الممكن ترك الجزء الأوسط من المشغل الثلاثي. Expr1؟: إرجاع expr3 expr1 إذا كان expr1 يقيم إلى صواب ، و expr3 خلاف ذلك.
وظائف مجهولة: لا ، لم تكن موجودة قبل 5.3.0 (انظر الملاحظة الأولى أدناه الأمثلة) ، على الأقل بهذه الطريقة:
function ($arg) { /* func body */ }
كانت الطريقة الوحيدة create_function()
, ، وهو أبطأ ، مرهق للغاية ومعرض للخطأ (بسبب استخدام سلاسل لتعريفات الوظائف).