تم إطلاق PHP 7.2 رسميًا اعتبارًا من 30 نوفمبر. يحتوي الإصدار على ميزات ووظائف وتحسينات جديدة ستسمح لنا بكتابة تعليمات برمجية أفضل. في هذا المنشور ، سنقدم بعض ميزات اللغة الأكثر إثارة للاهتمام مع PHP 7.2.
جرب نسخة تجريبية مجانية
تحديث: PHP 8.0 متاح الآن لجميع عملاء Kinsta.
يمكنك الاطلاع على القائمة الكاملة للتغييرات في صفحة طلبات التعليقات .
التحسينات الأساسية
إقرارات نوع الوسيطة
منذ PHP 5 ، يُسمح لنا بتحديد نوع الوسيطة المتوقع تمريرها في إعلان الوظيفة. إذا كانت القيمة المعطاة من نوع غير صحيح ، فإن PHP تتسبب في خطأ.
تحدد إعلانات نوع الوسيطة (المعروفة أيضًا باسم تلميحات النوع ) نوع المتغير المتوقع أن يتم تمريره إلى دالة أو أسلوب فئة.
هنا مثال:
class MyClass {
public $var = 'Hello World';
}
$myclass = new MyClass;
function test(MyClass $myclass){
return $myclass->var;
}
echo test($myclass);
في هذا الرمز ، تتوقع وظيفة الاختبار مثيل MyClass . قد يؤدي نوع البيانات غير الصحيح إلى الخطأ الفادح التالي:
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of <strong>MyClass</strong>, string given, called in /app/index.php on line 12 and defined in /app/index.php:8
نظرًا لأنه يمكن استخدام تلميحات الكتابة PHP 7.2 مع نوع بيانات الكائن ، ويسمح هذا التحسين بإعلان كائن عام كوسيطة لوظيفة أو طريقة. هنا مثال:
class MyClass {
public $var = '';
}
class FirstChild extends MyClass {
public $var = 'My name is Jim';
}
class SecondChild extends MyClass {
public $var = 'My name is John';
}
$firstchild = new FirstChild;
$secondchild = new SecondChild;
function test(object $arg) {
return $arg->var;
}
echo test($firstchild);
echo test($secondchild);
في هذا المثال قمنا بتسمية وظيفة الاختبار مرتين ، لتمرير كائن مختلف في كل مكالمة. لم يكن هذا ممكنا في إصدارات PHP السابقة.
أوامر عامل ميناء
تلميحات نوع الاختبار باستخدام PHP 7.0 و PHP 7.2 في Docker
إقرارات نوع إرجاع الكائن
إذا كانت تعريفات نوع الوسيطة تحدد النوع المتوقع لوسائط الدالة ، فإن تعريفات نوع الإرجاع تحدد النوع المتوقع للقيمة المرتجعة.
تحدد إقرارات نوع الإرجاع نوع المتغير المتوقع أن يتم إرجاعه بواسطة دالة.
اعتبارًا من PHP 7.2 ، يُسمح لنا باستخدام إقرارات نوع الإرجاع لنوع بيانات الكائن . هنا مثال:
class MyClass {
public $var = 'Hello World';
}
$myclass = new MyClass;
function test(MyClass $arg) : object {
return $arg;
}
echo test($myclass)->var;
تظهر إصدارات PHP السابقة الخطأ الفادح التالي:
Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10
بالطبع ، في PHP 7.2 ، يردد هذا الرمز “Hello World” .
توسيع نوع المعلمة
لا تسمح PHP حاليًا بأي تباين في أنواع المعلمات بين الفئات الفرعية والفئات أو الواجهات الرئيسية الخاصة بهم. ماذا يعني ذلك؟
ضع في اعتبارك الكود التالي:
<strong><?php</strong>
class MyClass {
public function myFunction(array $myarray) { /* ... */ }
}
class MyChildClass extends MyClass {
public function myFunction($myarray) { /* ... */ }
}
هنا قمنا بحذف نوع المعلمة في الفئة الفرعية. في PHP 7.0 ، يُصدر هذا الرمز التحذير التالي:
Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8
منذ PHP 7.2 ، يُسمح لنا بحذف نوع في فئة فرعية دون كسر أي رمز. سيسمح لنا هذا الاقتراح بترقية الفئات لاستخدام تلميحات الكتابة في المكتبات دون الحاجة إلى تحديث جميع الفئات الفرعية.
الفواصل اللاحقة في بناء جملة القائمة
الفاصلة اللاحقة بعد العنصر الأخير في المصفوفات هي بناء جملة صالح في PHP ، وفي بعض الأحيان يتم تشجيعها لإلحاق عناصر جديدة بسهولة وتجنب أخطاء التحليل بسبب فقدان الفاصلة. منذ PHP 7.2 ، يُسمح لنا باستخدام الفواصل اللاحقة في مساحات الأسماء المجمعة .
راجع الفواصل اللاحقة في بناء القائمة للحصول على عرض أقرب في RFC هذا وبعض أمثلة التعليمات البرمجية.
تحسينات الأمان
Argon2 في تجزئة كلمة المرور
Argon2 هي خوارزمية تجزئة قوية تم اختيارها لتكون الفائز في مسابقة Password Hashing لعام 2015 ، و PHP 7.2 ستقدمها إلينا كبديل آمن لخوارزمية Bcrypt .
يقدم إصدار PHP الجديد ثابت PASSWORD_ARGON2I ، والذي يمكن استخدامه الآن في وظائف password_ * :
password_hash('password', PASSWORD_ARGON2I);
على عكس Bcrypt ، الذي يأخذ عامل تكلفة واحدًا فقط ، يأخذ Argon2 ثلاثة عوامل تكلفة مميزة على النحو التالي:
A تكلفة الذاكرة الذي يحدد عدد كيلوبايت التي يجب أن تستهلك خلال تجزئة (القيم الافتراضية هي 1 << 10، أو 1024 مصرف كوردستان الدولي، أو 1 ميغابايت)
و تكلفة الوقت الذي يحدد عدد التكرارات من خوارزمية التجزئة (الافتراضي 2)
A عامل التوازي ، والذي يحدد عدد المواضيع الموازية التي سيتم استخدامها أثناء التجزئة (الافتراضي 2)
تحدد ثلاثة ثوابت جديدة عوامل التكلفة الافتراضية:
تريد أن تعرف كيف زدنا من حركة المرور لدينا أكثر من 1000 ٪؟
انضم إلى أكثر من 20000 آخرين ممن يتلقون رسائلنا الإخبارية الأسبوعية مع نصائح من الداخل حول وورد بريس!
إشترك الآن
PASSWORD_ARGON2_DEFAULT_MEMORY_COST
PASSWORD_ARGON2_DEFAULT_TIME_COST
PASSWORD_ARGON2_DEFAULT_THREADS
هنا مثال:
$options = ['memory_cost' => 1<<11, 'time_cost' => 4, 'threads' => 2];
password_hash('password', PASSWORD_ARGON2I, $options);
راجع Argon2 Password Hash لمزيد من المعلومات.
Libsodium كجزء من PHP Core
بدءًا من الإصدار 7.2 ، تتضمن PHP مكتبة Sodium في المركز. Libsodium هي مكتبة متعددة الأنظمة واللغات للتشفير وفك التشفير والتوقيعات وتجزئة كلمة المرور والمزيد.
كانت المكتبة متاحة سابقًا من خلال PECL .
للحصول على قائمة موثقة بوظائف Libsodium ، راجع دليل البدء السريع للمكتبة .
راجع أيضًا PHP 7.2: أول لغة برمجة تضيف تشفيرًا حديثًا إلى مكتبتها القياسية .
الإستنكار
فيما يلي قائمة بوظائف وميزات PHP 7.2 المهملة والتي ستتم إزالتها لاحقًا بعد إصدار PHP 8.0:
تم استبدال وظيفة __autoload بـ spl_autoload_register في PHP 5.1. سيتم الآن إلقاء إشعار الإيقاف عند مواجهته أثناء التجميع.
و $ php_errormsg يتم إنشاء متغير في نطاق محلي عندما يتم طرح خطأ غير فادح. منذ PHP 7.2 ، يجب استخدام error_get_last و error_clear_last بدلاً من ذلك.
يسمح create_function () بإنشاء دالة باسم دالة مُنشأة ، وقائمة بالوسيطات ورمز الجسم المقدم كوسائط . نظرًا لوجود مشكلات أمنية وسوء الأداء ، فقد تم تمييزه على أنه مهمل ويتم تشجيع استخدام المرفقات بدلاً من ذلك.
تم وضع علامة على إعداد mbstring.func_overload ini المعين على قيمة غير صفرية على أنه مهمل.
(unset) cast هو تعبير يُرجع دائمًا فارغًا ويعتبر عديم الفائدة.
هل تعاني من مشاكل التوقف و وورد بريس؟ Kinsta هو حل الاستضافة المصمم لتوفير الوقت! تحقق من ميزاتنا
يوزع parse_str () سلسلة استعلام في مصفوفة إذا تم توفير الوسيطة الثانية ، أو في جدول الرموز المحلي إذا لم يتم استخدامه. كما وضع dinamically المتغيرات في نطاق وظيفة غير بالإحباط لأسباب أمنية، واستخدام parse_str () دون الوسيطة الثانية سوف يرمي إشعار انتقاص.
يعتبر gmp_random () معتمدًا على النظام الأساسي وسيتم إهماله. استخدم gmp_random_bits () و gmp_random_rage () بدلاً من ذلك.
تُستخدم كل () للتكرار عبر مصفوفة مثل foreach () إلى حد كبير ، لكن foreach () مفضل لعدة أسباب ، بما في ذلك كونها أسرع 10 مرات. الآن سيتم إلقاء الإهمال على المكالمة الأولى في حلقة.
و ASSERT () الشيكات وظيفة التأكيد معين ويأخذ الإجراءات المناسبة إذا كانت النتيجة هي FALSE . تم الآن إيقاف استخدام assert () مع وسيطة السلسلة لأنه يفتح ثغرة RCE. و zend.assertion الخيار رسائل كتبها هذا المؤلف يمكن استخدامها لمنع تقييم التعبيرات التأكيد.
errcontext $ مصفوفة تحتوي على المتغيرات المحلية الموجودة في وقت حدوث خطأ. تم تمريره باعتباره الوسيطة الأخيرة لمعالجات الأخطاء التي تم تعيينها باستخدام الدالة set_error_handler () .
ماذا تعني PHP 7.2 لمستخدمي وورد بريس؟
وفقًا لصفحة إحصائيات وورد بريس الرسمية ، حتى كتابة هذا المقال ، فقط 19.8٪ من مستخدمي وورد بريس قاموا بالترقية إلى PHP 7. و 5٪ فقط يستخدمون PHP 7.1 . يمكنك أن ترى أن الغالبية العظمى من المستخدمين ، أكثر من 40٪ ، ما زالوا يعملون على PHP 5.6. الأمر الأكثر إثارة للرعب هو أن أكثر من 39٪ من المستخدمين يستخدمون إصدارات PHP غير مدعومة. اعتبارًا من ديسمبر 2016 ، قام وورد بريس.org بالفعل بزيادة توصياتهم الرسمية للمستخدمين من PHP 5.6 إلى PHP 7 أو أعلى.
احصائيات ووردبريس PHP 7.1
احصائيات ووردبريس PHP 7.1
الأرقام المذكورة أعلاه غير مشجعة بشكل خاص من وجهة نظر الأداء ، حيث أظهر PHP 7 أنه أسرع بشكل ملحوظ. فيما يلي بعض الإحصائيات:
تُظهر معايير PHP الرسمية أن PHP 7 تسمح للنظام بتنفيذ ضعف عدد الطلبات في الثانية مقارنةً بـ PHP 5.6 ، في نصف وقت الاستجابة تقريبًا.
نشر Christian Vigh أيضًا مقارنة أداء PHP وجد فيها أن PHP 5.2 كان أبطأ بنسبة 400٪ من PHP 7.
أجرينا أيضًا معايير الأداء الخاصة بنا في 2018 مع PHP 5.6 مقابل PHP 7 مقابل HHVM . وعلى غرار المعايير المذكورة أعلاه ، رأينا أن PHP 7.2 يمكنها تنفيذ ما يقرب من ثلاثة أضعاف عدد المعاملات (الطلبات) في الثانية مقارنة بـ PHP 5.6.
معايير ووردبريس
معايير ووردبريس
نتائج اختبار وورد بريس 4.9.4 PHP 5.6 المعيارية: 49.18 req / sec
نتائج اختبار وورد بريس 4.9.4 PHP 7.0 المعيارية: 133.55 req / sec
نتائج اختبار وورد بريس 4.9.4 PHP 7.1: 134.24 req / sec
نتائج اختبار وورد بريس 4.9.4 PHP 7.2 : 148.80 req / sec؟
نتائج اختبار وورد بريس 4.9.4 HHVM: 144.76 req / sec
كثير منها بطيء في التحديث لمجرد الوقت الذي يستغرقه اختبار جميع المكونات الإضافية والسمات الجديدة التابعة لجهات خارجية للتأكد من أنها تعمل بشكل صحيح. لكن في كثير من الأحيان ، يعود الأمر إلى أنهم ببساطة لم يفعلوا ذلك بعد. ألست متأكدًا من إصدار PHP الذي تقوم بتشغيله؟ تتمثل إحدى أسهل طرق التحقق في استخدام أداة مثل Pingdom أو Google Chrome Devtools. سيُظهر لك رأس طلب HTTP الأول عادةً الإصدار.
تحقق من نسخة PHP
تحقق من نسخة PHP
يعتمد هذا على عدم قيام المضيف بتعديل قيمة رأس X-Powered-By. إذا حدث ذلك ، فقد لا ترى إصدار PHP الخاص بك ، وفي هذه الحالة ستحتاج إلى تحميل ملف عبر FTP . أو يمكنك دائمًا التواصل مع مضيفك والسؤال.
التحديث إلى PHP 7.2
لم يتم إصدار PHP 7.2 تمامًا بعد ، ولكن بمجرد أن يتم إصداره يمكنك البدء في الاختبار. يمكنك اختبار موقع وورد بريس الخاص بك محليًا أو التحقق من البرامج النصية الخاصة بك في بيئة مثل Docker ، والتي تتيح لك اختبار إصدارات مختلفة من PHP من سطر الأوامر.
أو يمكنك استخدام بيئة التدريج ، حيث سيشبه ذلك موقع الإنتاج المباشر. أتاح Kinsta PHP 7.2 لجميع العملاء في 4 ديسمبر. يمكنك بسهولة إنشاء بيئة مرحلية بنقرة واحدة.
اختبار PHP 7.2 في بيئة التدريج
اختبار PHP 7.2 في بيئة التدريج
ما عليك سوى نقرة واحدة تغيير محرك PHP لموقع التدريج ضمن “أدوات” ويمكنك البدء في الاختبار لضمان توافق المكونات الإضافية والسمات التابعة لجهات خارجية. بمجرد التأكد من أن كل شيء يعمل ، يمكنك إما تغيير موقع الإنتاج الخاص بك إلى PHP 7.2 أو دفع موقع التدريج الخاص بك إلى الحياة .
التغيير إلى PHP 7.2
التغيير إلى PHP 7.2
الاستنتاجات
هل أنت جاهز للتبديل إلى PHP 7.2؟ نأمل أن تكون قد قمت الآن على الأقل بالانتقال إلى PHP 7. إذا لم تكن قد انتهيت الآن ، فهذا هو الوقت المناسب لبدء الاختبار. لذا ، قم بترقية البرامج النصية الخاصة بك ، وتحقق من الكود الخاص بك وأخبرنا بانطباعاتك الأولى عن PHP 7.2.
يُنصح بالقراءة: هل لغة PHP ميتة ؟
وفر الوقت والتكاليف وحقق أقصى قدر من أداء الموقع من خلال:
مساعدة فورية من خبراء استضافة وورد بريس ، 24/7.
تكامل Cloudflare Enterprise.
يصل الجمهور العالمي إلى 28 مركز بيانات حول العالم.
التحسين من خلال مراقبة أداء التطبيقات المضمنة لدينا.
كل ذلك وأكثر من ذلك بكثير ، في خطة واحدة بدون عقود طويلة الأجل ، وعمليات الترحيل المدعومة ، وضمان استرداد الأموال لمدة 30 يومًا. تحقق من خططنا أو تحدث إلى قسم المبيعات للعثور على الخطة المناسبة لك.

