الجديد في PHP 7.4

على الرغم من أن الإصدار الجديد من PHP صغير ، إلا أنه يوفر بالفعل الكثير من الميزات الجديدة ، دون المبالغة ، في ميزات رائعة لكل من بناء الجملة اللغوية وأدائها. قائمة الابتكارات ليست نهائية ، لكن التغييرات الرئيسية قد تمت بالفعل وقبلت. تم إطلاق الإصدار في ديسمبر 2019.



التغييرات الرئيسية للنسخة القادمة:

  • خصائص الفئة المكتوبة
  • التحميل المسبق لتحسين الأداء
  • وظائف السهم لكتابة وظائف مجهولة قصيرة
  • تعيين مشغل الاتحاد مع null (؟؟ =)
  • التباين / التعارض في توقيعات الطريقة القديمة
  • واجهة وظيفة خارجية تفتح إمكانيات جديدة لتطوير الامتدادات في PHP
  • تفريغ المشغل في المصفوفات

قراءة المزيد عن هذه وغيرها من التغييرات تحت القط.

تنويه: عدة مرات في مناقشاتي مع الزملاء عرضت مقالة برنت " الجديد في PHP 7.4 ". في البداية كنت أرغب في عمل ترجمة ، لكنني أدركت في هذه العملية أنه لم تتم الإشارة إلى جميع التحديثات الأخيرة في النص ، وهناك بعض الأخطاء ، لذلك ظهرت هذه المقالة بدلاً من الترجمة.

وظائف السهم ( RFC )


تسمح لك وظائف السهم بعمل سجل أقصر للوظائف المجهولة:

array_map(function (User $user) {    return $user->id; }, $users) array_map(fn(User $user) => $user->id, $users) 

بعض ميزات التنفيذ المعتمد لوظائف السهم:

  • يمكنهم الوصول إلى النطاق parent ، لذلك ليست هناك حاجة لاستخدام الكلمة الأساسية للاستخدام.
  • $this متاح أيضًا ، كما هو الحال في الوظائف المجهولة العادية.
  • يمكن أن تحتوي وظائف السهم على سطر واحد فقط ، وهو أيضًا عامل عودة.

يمكنك قراءة المزيد عنها في هذا المقال عن هبر.

الخصائص المكتوبة ( RFC )


الصيحة! يمكن أن تحتوي خصائص الفئة الآن على تلميح. هذا هو التغيير الذي طال انتظاره منذ PHP 7 نحو كتابة أقوى للغة. الآن لدينا كل الميزات الأساسية للكتابة القوية. جميع الأنواع متاحة للكتابة ، ما عدا void callable.

 class Bar {   public string $name;   public ?int $amount;   public Foo $foo; } 

إذا كنت تريد مني أن أفكر بمزيد من التفصيل في الإمكانيات الجديدة لكتابة خصائص الكائنات ، فقم بتدوين الملاحظات وسأكتب مقالة منفصلة عنها!

تعيين مشغل صلة خالية ( RFC )


بدلاً من هذا الدخول الطويل:

 $data['date'] = $data['date'] ?? new DateTime(); 

الآن سيكون من الممكن أن تكتب مثل هذا:

 $data['date'] ??= new DateTime(); 

مشغل تفريغ الصفيف ( RFC )


يمكنك الآن استخدام مشغل فك الحزم في المصفوفات:

 $arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; <i>// [0, 1, 2, 3, 4, 5, 6, 7]</i> 

يرجى ملاحظة أن هذا يعمل فقط مع المصفوفات غير النقابية.

واجهة الوظيفة الخارجية ( RFC )


تسمح لك واجهة الوظيفة الخارجية (FFI) بكتابة كود C مباشرة في كود PHP. هذا يعني أنه يمكن كتابة امتدادات PHP بلغة PHP خالصة.

تجدر الإشارة إلى أن هذا موضوع معقد. لا تزال بحاجة إلى معرفة C لاستخدام هذه الميزات بشكل صحيح.

التحميل المسبق ( RFC )


التحميل المسبق هو إضافة رائعة إلى مجموعة PHP ، والتي ينبغي أن تؤدي إلى بعض التحسينات الهامة في الأداء.

على سبيل المثال ، إذا كنت تستخدم إطار العمل ، فيجب تنزيل ملفاته وإعادة تجميعها لكل طلب. عند استخدام opcache - في المرة الأولى التي يتم فيها مشاركة هذه الملفات في معالجة طلب ما ، ثم يتم التحقق من التغييرات في كل مرة يتم فيها بنجاح. يسمح التحميل المسبق للخادم بتحميل ملفات PHP المحددة في الذاكرة عند بدء التشغيل وإتاحتها باستمرار لجميع الطلبات اللاحقة ، دون التحقق من تغييرات الملف.

تحسين الأداء "غير مجاني" - إذا تم تعديل الملفات المحملة مسبقًا ، فيجب إعادة تشغيل الخادم.

التباين / التعارض في توقيعات الطريقة القديمة ( RFCs )


يحتوي PHP حاليًا على أنواع معلمات ثابتة وأنواع إرجاع ثابتة. يتيح لك هذا التغيير تغيير نوع المعلمة إلى أحد أنواعها الفائقة. بدوره ، يمكن استبدال النوع الذي تم إرجاعه بنوعه الفرعي. وبالتالي ، فإن هذا التغيير سوف يسمح لاتباع مبدأ الاستبدال باربرا ليسكوف بصرامة أكبر.

مثال على استخدام نوع الإرجاع المتغير:

 interface Factory {   function make(): object; } class UserFactory implements Factory {   function make(): User; } 

والحجة المخالفة:

 interface Concatable {   function concat(Iterator $input); } class Collection implements Concatable {   function concat(iterable $input) {/* . . . */} } 

تسلسل كائن مخصص ( RFC )


تتوفر __serialize : __serialize و __unserialize . تجمع آلية التسلسل هذه بين براعة واجهة Serializable ونهج تطبيق __sleep/__wakeup . يمكن العثور على مزيد من التفاصيل حول اختلافاتهم في RFC.

أولوية التسلسل ( RFC )


إذا كتبت شيء مثل هذا:

 echo "sum: " . $a + $b; 

سيقوم PHP الآن بتفسير هذا على النحو التالي:

 echo ("sum: " . $a) + $b; 

سيقوم PHP 8 بتفسير ذلك بطريقة مختلفة:

 echo "sum :" . ($a + $b); 

يضيف PHP 7.4 تحذيرًا تقادمًا عندما يكتشف تعبيرًا يحتوي على "." قبل "+" أو "-" وليس محاطًا بأقواس.

__toString ( RFC ) استثناء الدعم


في السابق ، لا يمكن طرح استثناءات من طريقة السحر __toString . الأساس المنطقي لهذا السلوك هو أن تحويل الكائنات إلى سلاسل يتم تنفيذه في العديد من وظائف المكتبة القياسية ، وليس كلهم ​​جاهزون "لمعالجة" الاستثناءات بشكل صحيح. كجزء من RFC هذا ، تم إجراء تدقيق شامل لتحويلات السلسلة في قاعدة الشفرة ، ويمكن الآن إزالة هذا التقييد ، وقد تم ذلك.

انعكاس الرابط ( RFC )


تعتمد المكتبات ، مثل symfony/var-dumper ، اعتمادًا كبيرًا على ReflectionAPI لعرض المتغيرات بدقة. في السابق ، لم يكن هناك دعم مناسب لانعكاس الارتباط ، مما اضطر هذه المكتبات إلى الاعتماد على الاختراق لاكتشاف الروابط. يضيف PHP 7.4 فئة ReflectionReference التي تحل هذه المشكلة.

تمت إضافة طريقة mb_str_split ( RFC )


توفر هذه الوظيفة نفس وظيفة str_split ، ولكن للسلاسل المكتوبة str_split متعددة البايت.

ملحق ext-hash متاح دائمًا ( RFC )


هذا الامتداد متاح الآن باستمرار في جميع منشآت PHP.

لا يتم تمكين PEAR افتراضيًا ( EXTERNALS )


لم يعد PEAR مدعومًا بنشاط ، قرر الفريق الأساسي إزالته من التثبيت الافتراضي باستخدام PHP 7.4.

تسجيل خوارزمية تسجيل كلمة المرور ( RFC )


تمت إضافة وظيفة password_algos جديدة ، والتي تُرجع قائمة بجميع خوارزميات تجزئة كلمة المرور المسجلة.

روابط ضعيفة ( RFC )


تسمح لك الارتباطات الضعيفة بحفظ ارتباط لكائن لا يمنع إتلاف هذا الكائن. على سبيل المثال ، تكون مفيدة لتنفيذ بنيات تشبه ذاكرة التخزين المؤقت.

محدد الرقم الحرفي ( RFC )


أدى عدم وجود فواصل بصرية في مجموعات من الأرقام إلى زيادة وقت قراءة التعليمات البرمجية وتصحيحها ، وقد يؤدي ذلك إلى أخطاء غير مقصودة. تمت الآن إضافة دعم للشخصية السفلية في الحروف الحرفية لفصل مجموعات الأرقام بصريًا.

 1_000_000_000 // int 6.674_083e-11; // float 299_792_458;   // decimal 0xCAFE_F00D;  // hexadecimal 0b0101_1111;   // binary 0137_041;      // octal 

إقصاء العلامات المفتوحة القصيرة ( RFC )


علامة الافتتاح القصيرة <? تم إهماله وسيتم إزالته في PHP 8. لم تتأثر العلامة القصيرة <?= (echo) .

المشغل اليسار الثلاثي الثلاثي رفض ( RFC )


المشغل الثلاثي لديه بعض المراوغات غريبة في PHP. هذا RFC يهمل العوامل الثلاثية المتداخلة.

 1 ? 2 : 3 ? 4 : 5;   // deprecated (1 ? 2 : 3) ? 4 : 5; // ok 

في PHP 8 ، سينتج عن هذا السجل خطأ على مستوى الترجمة.

التغييرات غير المتوافقة إلى الوراء ( ترقية )


فيما يلي بعض أهم التغييرات غير المتوافقة مع الإصدارات السابقة:

  • يتم إهمال استدعاء parent:: في فصل دراسي بدون أحد الوالدين.
  • استدعاء var_dump على مثيل DateTime أو DateTimeImmutable لم يعد يجعل خصائص الكائن متوفرة.
  • openssl_random_pseudo_bytes سوف يرمي استثناء في حالات الخطأ التي تسببها مكتبة OpenSSL. سابقا ، عاد كاذبة ، والتي يمكن أن تؤدي إلى توليد سلسلة فارغة.
  • محاولة إجراء تسلسل PDO أو مثيل PDOStatement يطرح Exception بدلاً من PDOException .
  • استدعاء get_object_vars() على مثيل ArrayObject سيعود خصائص ArrayObject نفسها ، وليس قيمة الصفيف الملتفة. للحصول على قيم صفيف ملفوفة كما كان من قبل ، قم ArrayObject على نوع array .

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


All Articles