ما الجديد في PHP 8.2: نظرة شاملة

نشرت: 2023-10-17
شارك على الملفات الشخصية الاجتماعية.

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

جدول المحتويات

ميزات جديدة

1. التعدادات: التعريف بسلامة النوع

ربما يكون الإصدار 8.2 أحد أكثر الإضافات المنتظرة بفارغ الصبر إلى PHP، حيث يقدم أخيرًا دعمًا أصليًا للتعدادات (التعدادات). تسمح التعدادات للمطورين بتعريف مجموعة من القيم المُسمّاة بأنواع صريحة، مما يضيف طبقة مهمة من أمان النوع إلى PHP.

فيما يلي مثال بسيط لكيفية عمل التعدادات:

 enum Color { case RED; case GREEN; case BLUE; }

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

2. الترويج للمنشئ: تقليل التعليمات البرمجية النمطية

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

 class User { public function __construct( public string $name, public string $email, public ?string $bio = null ) {} }

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

3. فئات للقراءة فقط

في PHP 8.2، تمكّن فئات القراءة فقط المطورين من تعريف الفئات ذات الخصائص التي لا يمكن تعيينها إلا مرة واحدة، عادةً أثناء إنشاء الكائن. وهذا يضمن بقاء الخصائص ثابتة طوال عمر الكائن. يتم الإعلان عن خصائص القراءة فقط باستخدام مُعدِّل القراءة فقط، ويجب تهيئتها في مُنشئ الفئة.

مع PHP 8.2، أصبحت العملية مبسطة تمامًا:

 class ReadOnlyClass $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

4. الوسيطات المسماة في عبارات "تشمل" و"تتطلب".

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

 include filename: 'my_file.php', once: true;

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

5. إشعارات الإهمال للأقواس الضمنية

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

 // Deprecated usage myFunction; // Recommended usage myFunction();

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

6. دعم إخفاء قيم المعلمات الحساسة

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

في PHP 8.2، سيتم تقديم سمة جديدة تسمى "SensitiveParameter". تعمل هذه السمة على إخفاء البيانات الحساسة بحيث لا يتم عرضها أو تسجيلها عندما يواجه التطبيق أخطاء. ومن الناحية العملية، فإن استخدامه سوف يظهر على النحو التالي:

 function passwords( $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

7. مقدمة عن وظيفة mysqli_execute_query وطريقة mysqli::execute_query

PHP، لغة البرمجة النصية متعددة الاستخدامات لتطوير الويب، تتطور باستمرار لتعزيز قدراتها وسهولة استخدامها. في PHP 8.2، يمكن للمطورين توقع تقديم ميزتين جديدتين: وظيفة mysqli_execute_query وطريقة mysqli::execute_query. تم تصميم هذه الإضافات لتبسيط وتبسيط تفاعلات قاعدة البيانات، مما يجعلها أكثر ملاءمة للعمل مع قواعد بيانات MySQL.

وظيفة mysqli_execute_query

تعد وظيفة mysqli_execute_query إضافة قوية إلى ملحق MySQLi الخاص بـ PHP. تم تصميمه خصيصًا لتنفيذ استعلامات SQL مقابل قاعدة بيانات MySQL. توفر هذه الوظيفة طريقة مباشرة وفعالة لإرسال استعلامات SQL واسترداد النتائج. فيما يلي مثال مختصر لاستخدامه:

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM users WHERE status = ?"; $stmt = $mysqli->prepare($sql); $status = "active"; $stmt->bind_param("s", $status); $result = mysqli_execute_query($stmt); while ($row = $result->fetch_assoc()) { } $stmt->close(); $mysqli->close();

تعمل وظيفة mysqli_execute_query على تبسيط عملية إعداد وتنفيذ الاستعلامات مع الحفاظ على الأمان من خلال ربط المعلمات.

طريقة mysqli::execute_query

بالإضافة إلى الوظيفة الجديدة، يقدم PHP 8.2 طريقة mysqli::execute_query كجزء من فئة MySQLi. تعمل هذه الطريقة على تبسيط تنفيذ الاستعلام للمطورين الذين يفضلون البرمجة الموجهة للكائنات. وفيما يلي مثال على استخدامه:

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM products WHERE category = ?"; $stmt = $mysqli->prepare($sql); $category = "electronics"; $stmt->bind_param("s", $category); $result = $stmt->execute_query(); while ($row = $result->fetch_assoc()) {} $stmt->close(); $mysqli->close();

يوفر الأسلوب mysqli::execute_query أسلوبًا موجهًا للكائنات لتنفيذ استعلامات قاعدة البيانات، مما يوفر تجربة أكثر سهولة للمطورين الذين يفضلون هذا النمط من البرمجة.

8. السماح بالثوابت في السمات: تعزيز إمكانية إعادة استخدام التعليمات البرمجية وقابلية صيانتها

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

دور السمات في PHP

قبل الخوض في إضافة الثوابت في السمات، دعونا نعيد النظر بإيجاز في دور السمات في PHP. السمات هي آلية لإعادة استخدام التعليمات البرمجية في لغات الوراثة الفردية مثل PHP. إنها تسمح لك بتحديد مجموعة من الأساليب التي يمكن إعادة استخدامها عبر فئات متعددة. عندما يستخدم الفصل سمة ما، فإنه يرث الأساليب المحددة في تلك السمة، مما يعزز نمطية التعليمات البرمجية ويقلل التكرار.

 trait Loggable { public function log($message) { }} class User { use Loggable; public function register() { $this->log('User registered.'); }}

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

الثوابت في السمات: ميزة جديدة

باستخدام PHP 8.2، يمكن للمطورين الآن تعريف الثوابت ضمن السمات، وهو ما لم يكن ممكنًا في الإصدارات السابقة من PHP. تعمل الثوابت في السمات بشكل مشابه للثوابت في الفئات، ولكن يمكن الوصول إليها في الفئات التي تستخدم السمة.

 trait Configuration {
const MAX_CONNECTIONS = 10;
}class Database {
use Configuration;
public function connect() { $maxConnections = self::MAX_CONNECTIONS; } }

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

9. تقديم أنواع جديدة من النماذج العادية المنفصلة (DNF) في PHP 8.2

PHP هي لغة برمجة نصية ديناميكية ومتعددة الاستخدامات، وتستمر في التطور لتلبية المتطلبات المتزايدة لتطوير الويب. مع إصدار PHP 8.2، أصبح المطورون على استعداد لتقديم أنواع جديدة من النماذج العادية المنفصلة (DNF). تعمل هذه الإضافة إلى اللغة على تحسين تعبير PHP ومرونته، مما يتيح للمطورين العمل مع التعبيرات المنطقية المعقدة بشكل أكثر فعالية.

فهم النموذج العادي المنفصل (DNF)

قبل الخوض في أنواع DNF الجديدة في PHP 8.2، من الضروري فهم ما يمثله النموذج العادي المنفصل (DNF) في المنطق. DNF هو شكل أساسي لتمثيل التعبيرات المنطقية حيث يكون كل تعبير عبارة عن انفصال (OR) من أدوات العطف (AND). بعبارات أبسط، إنها طريقة لتقسيم البيانات المنطقية المعقدة إلى سلسلة من الشروط البسيطة المرتبطة بعوامل تشغيل OR.

على سبيل المثال، التعبير المنطقي (A AND B) أو (C AND D) موجود في DNF لأنه عبارة عن انفصال بين حرفين.

أنواع DNF الجديدة في PHP 8.2

يقدم PHP 8.2 أنواع DNF جديدة كطريقة للعمل مع التعبيرات المنطقية ومعالجتها بشكل أكثر سهولة. توفر أنواع DNF هذه تجريدًا عالي المستوى للتعامل مع المنطق المعقد، مما يسهل على المطورين إدارة الشروط المعقدة في التعليمات البرمجية الخاصة بهم.

فيما يلي نظرة عامة على أنواع DNF الجديدة وكيفية استخدامها:

1. نموذج منفصل عادي

يمثل نوع DisjunctiveNormalForm التعبيرات المنطقية في DNF. يمكنك إنشاء مثيلات DisjunctiveNormalForm لتغليف الشروط المعقدة:

 $dnfExpression = new DisjunctiveNormalForm(
new Conjunction('A', 'B'),
new Conjunction('C', 'D')
);

في هذا المثال، يمثل $dnfExpression تعبير DNF (A AND B) أو (C وD).

2. الإقتران

يمثل نوع الوصلة الاقتران (AND) لشرط واحد أو أكثر. يمكنك إنشاء مثيلات Conjunction لإنشاء أدوات ربط معقدة:

 $conjunction = new Conjunction('A', 'B', 'C');

هنا، $conjunction يمثل أداة الاقتران (A وB وC).

3. القيمة المنطقية

يمثل نوع LogicalValue قيمًا منطقية بسيطة، والتي يمكن أن تكون إما صحيحة أو خاطئة أو متغيرة. يمكن استخدامه مع أنواع DNF الأخرى لإنشاء تعبيرات أكثر تعقيدًا:

 $value = new LogicalValue('A');

هنا، تمثل القيمة $ المتغير المنطقي A.

10. تقديم سمةallowDynamicProperties: توسيع المرونة في PHP

تعتبر خاصية "AllowDynamicProperties" إضافة رائعة إلى PHP، خاصة للمطورين الذين يقدرون الطبيعة الديناميكية للغة. باستخدام هذه السمة، يمكنك تمكين كائن من قبول ومعالجة الخصائص التي لم يتم تعريفها بشكل صريح ضمن فئته.

فيما يلي مثال بسيط لكيفية تطبيق السمة "AllowDynamicProperties":

 class DynamicObject {
}
$dynamicObj = new DynamicObject();
$dynamicObj->newProperty = "This is a dynamic property.";
echo $dynamicObj->newProperty;

في هذا المثال، تم وضع علامة على فئة "DynamicObject" بالسمة "AllowDynamicProperties"، والتي تسمح بإضافة الخصائص والوصول إليها ديناميكيًا. يمكن أن يكون هذا السلوك الديناميكي مفيدًا بشكل خاص عند التعامل مع الكائنات التي تحتاج إلى التكيف مع بنيات البيانات المختلفة أو عند العمل مع البيانات من مصادر خارجية، مثل واجهات برمجة التطبيقات.

الإهمال والإزالة في PHP 8.2

  • الامتدادات: لقد ودع PHP 8.2 العديد من الامتدادات القديمة والتي لم تتم صيانتها، بما في ذلك "oci8" و"mysql" و"mcrypt" و"interbase". يتم تشجيع المطورين الذين يعتمدون على هذه الامتدادات بشدة على الانتقال إلى البدائل الحديثة لضمان أمان واستقرار تطبيقاتهم.
  • دالة every() : تم الآن إهمال وظيفة every() رسميًا في PHP 8.2. تم استخدام هذه الوظيفة للتكرار على المصفوفات من خلال تقديم المؤشر الداخلي وإرجاع زوج القيمة الرئيسية الحالي. ومع ذلك، فقد واجهت مشكلات مختلفة وتم استبدالها إلى حد كبير بحلقات foreach، والتي توفر إمكانية قراءة وصيانة أفضل.
  • وظيفة create_function() : تم وضع علامة على وظيفة create_function() على أنها مهملة. تم استخدام هذه الوظيفة لإنشاء وظائف مجهولة ديناميكيًا، ولكن لم يُنصح بها بسبب مخاوف أمنية وبدائل أفضل مثل عمليات الإغلاق.
  • FILTER_SANITIZE_MAGIC_QUOTES علامة التصفية : تم إهمال علامة التصفية FILTER_SANITIZE_MAGIC_QUOTES. تم استخدام هذه العلامة مع filter_var() لتنقيح الإدخال عن طريق إضافة خطوط مائلة قبل الأحرف مثل علامات الاقتباس المفردة وعلامات الاقتباس المزدوجة. تقترح أفضل الممارسات الحديثة استخدام البيانات المعدة والاستعلامات ذات المعلمات للتعامل مع إدخال قاعدة البيانات، مما يجعل هذه العلامة قديمة.
  • وظيفة stristr() : تم إهمال وظيفة stristr()، التي تقوم بإجراء بحث غير حساس لحالة الأحرف عن سلسلة فرعية في سلسلة. بينما لا يزال يعمل، يتم تشجيع المطورين على استخدام الإصدار غير الحساس لحالة الأحرف، stripos()، أو البدائل str_contains() للحصول على وضوح أفضل.
  • Define() with Array Arguments : تم الآن إهمال استخدام Define() لتعريف الثوابت باستخدام المصفوفات كقيم. على الرغم من أنه كان من الممكن تعريف الثوابت بالمصفوفات كقيم، إلا أن هذه الممارسة تعتبر غير تقليدية، ويجب أن تحتوي الثوابت عادةً على قيم عددية.
  • علامتا SORT_NUMERIC وSORT_REGULAR : تم إهمال علامتي SORT_NUMERIC وSORT_REGULAR لوظائف الفرز مثلsort() وusort(). لم تعد هناك حاجة لهذه العلامات، حيث تكتشف PHP تلقائيًا نوع بيانات العناصر وتقوم بفرزها وفقًا لذلك.

تحسينات في الأداء

يقدم PHP 8.2 العديد من التحسينات والتحسينات في الأداء تحت الغطاء. في حين أن مدى هذه التحسينات قد يختلف اعتمادًا على حالة الاستخدام المحددة لديك، فمن المرجح أن توفر الترقية إلى PHP 8.2 بعض فوائد الأداء الملحوظة. يمكن أن يكون لهذه التحسينات تأثير كبير على التطبيقات ذات حركة المرور العالية أو تلك التي تؤدي مهام كثيفة الاستخدام للموارد، مما يجعلها أكثر استجابة وكفاءة.

إصلاحات الأخطاء والاستقرار

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

الأسئلة الشائعة - الجديد في PHP 8.2

لماذا تم تقديم إشعارات الإهمال للأقواس الضمنية في PHP 8.2؟

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

ما هي فئات القراءة فقط، وكيف تعمل في PHP 8.2؟

تسمح فئات القراءة فقط في PHP 8.2 بتعيين الخصائص مرة واحدة فقط، عادةً أثناء إنشاء الكائن، مما يضمن بقاءها ثابتة طوال عمر الكائن. يتم الإعلان عن خصائص القراءة فقط باستخدام مُعدِّل القراءة فقط.

كيف تعمل وظيفة mysqli_execute_query وطريقة mysqli::execute_query على تبسيط تفاعلات قاعدة البيانات في PHP 8.2؟

تعمل هذه الميزات على تبسيط عملية تنفيذ استعلامات SQL مقابل قاعدة بيانات MySQL، مما يوفر طرقًا فعالة وآمنة لإرسال الاستعلامات واسترداد النتائج، إما من الناحية الإجرائية أو بطريقة موجهة للكائنات.

كيف تعمل سمة "AllowDynamicProperties" على توسيع المرونة في PHP 8.2؟

تسمح السمة "AllowDynamicProperties" للكائنات بقبول ومعالجة الخصائص التي لم يتم تعريفها بشكل صريح داخل فئتها، مما يعزز الطبيعة الديناميكية لـ PHP.

ما أهمية إصلاح الأخطاء والاستقرار في PHP 8.2؟

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

خاتمة

في الختام، PHP 8.2 يظهر كعلامة محورية في المشهد المتطور باستمرار لتطوير الويب. بفضل مجموعة واسعة من الميزات المبتكرة والمرونة المحسنة وتحسينات الأداء، فإنه يلبي المتطلبات المتطورة للمطورين في جميع أنحاء العالم.

إن إدخال التعدادات، وترويج المُنشئ، وفئات القراءة فقط، والوسائط المُسماة، وسمةallowDynamicProperties يُمكّن المطورين من كتابة تعليمات برمجية أكثر وضوحًا وأكثر قابلية للصيانة. بالإضافة إلى ذلك، توفر أنواع النموذج العادي المنفصل (DNF) الجديدة إمكانات معالجة منطقية متقدمة لـ PHP، مما يزيد من تنوعها. ومع ذلك، مع تقدم PHP، فإنها أيضًا تودع الامتدادات والوظائف القديمة بينما تعالج الأخطاء بجدية، مما يضمن بقاءها خيارًا موثوقًا وآمنًا لتطوير الويب.

محتوى ذو صلة:

كيفية إصلاح خطأ "WordPress Disable PHP Update Required" (طريقتان)

سجلات الاستعلام البطيئة في MySQL