على الرغم من أن الإصدار الجديد من 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
.