سوف PHP 7.4 تشمل وظائف السهم (اختصار لتدوين وظائف مجهولة المصدر)

اكتمال التصويت على بناء الجملة المختصرة للوظائف (51 صوتًا مؤيدًا ، مقابل 8).


كان:


$result = array_filter($paths, function ($v) use ($names) { return in_array($v, $names); }); 

أصبح:


 $result = array_filter($paths, fn($v) => in_array($v, $names)); 

التفاصيل تحت خفض


بناء الجملة الجديد هو:


بناء الجملة


 fn(_) => _ 

في توقيع دالة السهم ، كما هو الحال في وظيفة عادية ، يمكنك تحديد أنواع ، الإعدادات الافتراضية ، إلخ.


 fn(array $x) => $x; fn(): int => $x; fn($x = 42) => $x; fn(&$x) => $x; fn&($x) => $x; fn($x, ...$rest) => $rest; 

تحذير! fn كلمة رئيسية جديدة fn ، مما يعني عدم التوافق إلى الوراء!


أفكار بناء جملة أخرى (تم تجاهلها)


خيارات نظرت:


  //  ,        ($x) => $x * $y //   ,     ,     { ($x) => $x + $y } //     Hack;       ($x) ==> $x * $y // ,      ($x) -> $x * $y //      $x-- > $x*$y $x --> $x * $y //    Rust,    |$x| => $x * $y 

وبعض الآخرين


إغلاق المتغيرات


! المهم على عكس الإصدارات السابقة من php ، حيث كان من الضروري تعيين متغيرات قابلة للقفل بشكل صريح مع مشغل الاستخدام ، فإن وظيفة السهم تغلق ضمنيا النطاق الأصلي بالكامل.


فيما يلي الإدخالات المكافئة:


 $y = 1; $fn1 = fn($x) => $x + $y; $fn2 = function ($x) use ($y) { return $x + $y; }; 

$ هذا المتغير يغلق تماما مثل أي متغير آخر. إذا كان هذا سلوكًا غير مرغوب فيه ، فيمكنك تعطيله باستخدام الكلمة الأساسية الثابتة .


 class Test { public function method() { $fn = fn() => var_dump($this); $fn(); // object(Test)#1 { ... } $fn = static fn() => var_dump($this); $fn(); // Error: Using $this when not in object context } } 

يحدث إغلاق المتغيرات في وظائف السهم حسب القيمة (على عكس لغة Go ، على سبيل المثال). أي لن يؤدي تغيير المتغيرات داخل دالة إلى تغيير المتغير في النطاق الأصل.


النتائج


لقد أصبح الرمز أكثر إحكاما بكثير ، وعلى الرغم من أنه ليس مضغوطًا كما هو الحال في جافا سكريبت وبعض اللغات الأخرى ، إلا أنه سيكون أكثر متعة في الكتابة:


 $result = Collection::from([1, 2]) ->map(fn($v) => $v * 2) ->reduce(fn($tmp, $v) => $tmp + $v, 0); echo $result; //6 

على عكس بعض اللغات الأخرى ، لا تدعم وظائف الأسهم في php عبارات متعددة مفصولة بحرف ما ; لأن هذا (وفقًا لمؤلفي RFC) يتناقض مع فكرة بناء جملة مختزل. ربما سيتم تنقيح هذا في المستقبل.


سنناقش بالتأكيد وظائف السهم في php بالتفصيل في بودكاست Zinc Prod ، لذلك تأكد من الاشتراك.


رابط RFC

Source: https://habr.com/ru/post/ar450544/


All Articles