إصدار لغة البرمجة PHP 8.3

وبعد عام من التطوير، تم تقديم إصدار لغة البرمجة PHP 8.3. يتضمن الفرع الجديد سلسلة من الميزات الجديدة، بالإضافة إلى العديد من التغييرات التي تؤدي إلى كسر التوافق.

التغييرات الرئيسية في PHP 8.3:

  • أثناء استنساخ الفئة، من الممكن إعادة تهيئة الخصائص باستخدام السمة "للقراءة فقط". يُسمح بتجاوز خصائص القراءة فقط داخل وظيفة "__clone": فئة القراءة فقط Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // مسموح به على الرغم من أن الخاصية "createdAt" للقراءة فقط. } }
  • تم توفير القدرة على استخدام الثوابت مع إشارة النوع في الفئات والسمات والتعدادات: class Foo { const string BAR = 'baz'; }
  • تمت إضافة دعم للسمة "#[Override]"، والتي يمكن للمطور من خلالها إبلاغ المترجم الفوري بأن الطريقة المميزة تتجاوز بعض الطرق الأصلية. إذا لم يكن هناك تجاوز، فسيعرض المترجم خطأ.
  • تم تغيير التعامل مع القيم السالبة كمؤشر صفيف. على سبيل المثال، عند إضافة عنصر برقم "-5" إلى مصفوفة فارغة وإضافة عنصر آخر، سبق أن تم حفظ العنصر الثاني بفهرس "0"، ولكن بدءًا من الإصدار PHP 8.3 سيتم حفظه بفهرس "-4" . $صفيف = []; $array[-5] = 'a'; $array[] = 'ب'; var_export($array); // كانت مصفوفة (-5 => 'a', 0 => 'b') // أصبحت مصفوفة (-5 => 'a', -4 => 'b')
  • تمت إضافة القدرة على إنشاء فئات مجهولة في وضع القراءة فقط: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • تمت إضافة وظيفة json_validate() للتحقق بسرعة مما إذا كانت السلسلة بتنسيق JSON دون إجراء عمليات فك التشفير. json_validate (سلسلة $json، عمق $ int = 512، علامات int $ = 0): منطقي
  • تمت إضافة طرق جديدة إلى فئة Randomizer، والتي توفر واجهة برمجة تطبيقات عالية المستوى لإنشاء أرقام وتسلسلات شبه عشوائية: getBytesFromString لإنشاء سلسلة بحجم معين، باستخدام الأحرف الموجودة في سلسلة أخرى بترتيب عشوائي؛ getFloat وnextFloat لإنشاء رقم فاصلة عائمة عشوائي يقع ضمن النطاق المحدد.
  • تمت إضافة القدرة على استرداد الثوابت باستخدام بناء جملة الفئة الديناميكية: class Foo { const BAR = 'bar'; } $name = 'BAR'; // سابقًا، لاسترداد ثابت BAR، كان عليك الاتصال بـ Constant(Foo::class . '::' . $name); // الآن فقط حدد Foo::{$name};
  • تمت إضافة إنشاء استثناءات فردية (DateMalformedIntervalStringException، DateInvalidOperationException، DateRangeError) في حالة حدوث مشكلات في العمليات التي تعمل مع التواريخ والوقت.
  • تحسين معالجة الأخطاء التي تحدث أثناء تحليل البيانات المتسلسلة في وظيفة unserialize(). في حالة حدوث مشكلات، يقوم unserialize() الآن بإصدار E_WARNING بدلاً من E_NOTICE.
  • تم إجراء تغييرات على الدالة range(). يتم إنشاء استثناء عند محاولة تمرير كائنات أو موارد أو صفائف في متغيرات تحدد حدود النطاق، وكذلك عند تحديد قيمة سالبة في المعلمة $step أو قيمة غير محددة في أي معلمة. يمكن الآن إخراج قائمة بالأحرف عند تحديد سلاسل بدلاً من الأرقام (على سبيل المثال، "range('5', 'z')").
  • تم تغيير سلوك السمات ذات الخصائص الثابتة، والتي تتجاوز الآن الخصائص الثابتة الموروثة من الفئة الأصلية.
  • تمت إضافة إعدادات للحماية من تجاوز سعة المكدس. تمت إضافة توجيهات zend.max_allowed_stack_size وzend.reserved_stack_size إلى ملف ini، مما يحدد الحد الأقصى لحجم المكدس المسموح به والمحفوظ. سوف يتعطل البرنامج عندما يقترب من استنفاد المكدس، عندما يكون المكدس ممتلئًا بأكثر من الفرق بين zend.max_allowed_stack_size وzend.reserved_stack_size (سيتوقف التنفيذ قبل حدوث خطأ التجزئة). افتراضيًا، يتم تعيين قيمة zend.max_allowed_stack_size على 0 (0 - يتم تحديد الحجم تلقائيًا؛ ولتعطيل القيد، يمكنك تعيينه على -1).
  • تمت إضافة وظائف POSIX الجديدة posix_sysconf() وposix_pathconf() وposix_fpathconf() وposix_eaccess().
  • تمت إضافة وظيفة mb_str_pad، وهي تناظرية لوظيفة السلسلة str_pad()، المصممة للعمل مع ترميزات متعددة البايت مثل UTF-8.
  • يسمح لك بإنشاء عمليات إغلاق من الأساليب وتمرير الوسائط المسماة إلى عمليات الإغلاق تلك. $test = اختبار جديد(); إغلاق $ = $test->magic(...); $closure(a: 'hello', b: 'world');
  • تم تغيير السلوك عند التعامل مع رؤية الثوابت في الواجهات. الواجهة الأولى { public const FOO = 'foo'; } تنفذ الفئة C I { public const FOO = 'foo'; }
  • تم توسيع إمكانيات وظائف array_sum() وray_product() وposix_getrlimit() وgc_status() وclass_alias() وmysqli_poll() وray_pad() وproc_get_status().
  • لقد تم إهمال القدرة على تمرير قيمة عرض $ سالبة إلى mb_srimwidth(). تمت إزالة الثابت NumberFormatter::TYPE_CURRENCY. تم إيقاف دعم استدعاء الدالة ldap_connect()‎ بمعلمتين $host و$port. تمت إزالة الإعداد opcache.consistency_checks.

المصدر: opennet.ru

إضافة تعليق