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

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

التحسينات الرئيسية في PHP 8.2:

  • تمت إضافة القدرة على تمييز الفصل على أنه للقراءة فقط. يمكن تعيين الخصائص في هذه الفئات مرة واحدة فقط ، وبعد ذلك لن تكون متاحة للتغيير. في السابق ، كان من الممكن وضع علامة على خصائص الفئة الفردية للقراءة فقط ، ولكن يمكنك الآن تشغيل هذا الوضع لجميع خصائص الفصل الدراسي مرة واحدة. يؤدي تحديد علامة "للقراءة فقط" على مستوى الفصل الدراسي إلى حظر الإضافة الديناميكية للخصائص إلى الفصل. للقراءة فقط فئة Post {public function __construct (السلسلة العامة $ title، public Author $ author،) {}} $ post = new Post (/ *… * /)؛ $ post-> غير معروف = "خطأ" ؛ // خطأ: لا يمكن إنشاء خاصية ديناميكية Post :: $ unknown
  • تمت إضافة أنواع منفصلة "صحيح" و"خطأ" و"خالية"، والتي يمكن أن تأخذ قيمة صالحة واحدة فقط وتستخدم، على سبيل المثال، لإرجاع دالة بعلامة إنهاء خطأ أو قيمة فارغة. في السابق، كان من الممكن استخدام "true" و"false" و"null" فقط مع الأنواع الأخرى (على سبيل المثال، "string|false")، ولكن الآن يمكن استخدامها بشكل منفصل: function AlwaysFalse(): false { return false ; }
  • توفير القدرة على تصفية الإعدادات الحساسة في إخراج تتبع المكدس في وقت حدوث خطأ. قد يكون الاستغناء عن بعض المعلومات مطلوبًا عند إرسال معلومات حول الأخطاء التي تحدث تلقائيًا إلى خدمات الجهات الخارجية التي تتعقب المشكلات وتبلغ المطورين عنها. على سبيل المثال ، يمكنك استبعاد المعلمات من التتبع التي تتضمن أسماء المستخدمين وكلمات المرور ومتغيرات البيئة. اختبار الوظيفة ($ foo، # [\ SensitiveParameter] $ password، $ baz) {throw new Exception ('Error')؛ } test ('foo'، 'password'، 'baz')؛ خطأ فادح: استثناء غير معلوم: خطأ في test.php: 8 تتبع المكدس: # 0 test.php (11): test ('foo'، Object (SensitiveParameterValue)، 'baz') # 1 {main} ألقيت في test.php عبر الإنترنت 8
  • يسمح بتحديد الثوابت في السمات (السمة، آلية إعادة استخدام الكود). يمكن الوصول إلى الثوابت المحددة في السمة من خلال الفئة التي تستخدم السمة (ولكن ليس من خلال اسم السمة). سمة فو { public const CONSTANT = 1; شريط الوظائف العامة (): int { return self::CONSTANT; // خطأ فادح } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • تمت إضافة القدرة على تحديد الأنواع في النموذج العادي المنفصل (DNF، النموذج العادي المنفصل)، والذي يسمح لك بدمج اتحاد الأنواع (مجموعات من نوعين أو أكثر) وتقاطع الأنواع (الأنواع التي تندرج قيمها تحت عدة أنواع) أنواع في وقت واحد). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } إرجاع كيان $; } }
  • تم اقتراح امتداد جديد "عشوائي" مع وظائف وفئات لتوليد أرقام وتسلسلات شبه عشوائية. توفر الوحدة واجهة موجهة للكائنات، وتسمح لك باختيار محركات مختلفة لإنشاء أرقام عشوائية زائفة، بما في ذلك تلك المناسبة للاستخدام في التشفير، وتوفر وظائف مساعدة، على سبيل المثال، لخلط المصفوفات والسلاسل بشكل عشوائي، واختيار مفاتيح المصفوفة العشوائية، الاستخدام المتزامن للعديد من المولدات مع حالتك المستقلة. $rng = $is_production ؟ new Random\Engine\Secure() : Random\Engine\Mt19937 الجديد (1234) الجديد ؛ $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • تم تنفيذ تحويل الحالة المستقل عن الإعدادات المحلية. تعمل وظائف مثل strtolower () و strtoupper () الآن دائمًا على تحويل حالة الأحرف في نطاق ASCII ، كما هو الحال عند تعيين الإعدادات المحلية على "C".
  • تمت إضافة وظائف جديدة: mysqli_execute_query، وcurl_upkeep، وmemory_reset_peak_usage، وini_parse_quantity، وlibxml_get_external_entity_loader، وsodium_crypto_stream_xchacha20_xor_ic، وopensl_cipher_key_length.
  • تمت إضافة طرق جديدة: mysqli::execute_query، ZipArchive::getStreamIndex، ZipArchive::getStreamName، ZipArchive::clearError، ReflectionFunction::isAnonymous، ReflectionMethod::hasPrototype.
  • لقد تم إهمال القدرة على إنشاء الخصائص بشكل ديناميكي في الفصل الدراسي. في PHP 9.0، سيؤدي الوصول إلى الخصائص التي لم يتم تعريفها مبدئيًا في الفئة إلى حدوث خطأ (ErrorException). ستستمر الفئات التي توفر أساليب __get و __set لإنشاء الخصائص، أو الخصائص الديناميكية في stdClass، في العمل دون تغيير، وسيتم دعم العمل الضمني فقط مع الخصائص غير الموجودة لحماية المطور من الأخطاء المخفية. للحفاظ على عمل الكود القديم، تم اقتراح السمة "#[AllowDynamicProperties]"، مما يسمح باستخدام الخصائص الديناميكية.
  • تم إهمال القدرة على استبدال القيم المتغيرة في السلاسل باستخدام التعبيرات "$ {var}" و $ {(var)} ". تم الاحتفاظ بدعم استبدالات "{$ var}" و "$ var" شائعة الاستخدام. على سبيل المثال: "مرحبًا {$ world}" ؛ موافق "Hello $ world" ؛ حسنًا "مرحبًا $ {world}" ؛ موقوف: استخدام $ {} في السلاسل مهمل
  • تم إهمال العناصر القابلة للاستدعاء المدعومة جزئيًا والتي يمكن استدعاؤها عبر "call_user_func ($ callable)" ، لكن لا تدعم الاتصال بالصيغة "$ callable ()": "self :: method" "parent :: method" "static :: الطريقة "[" self "،" method "] [" الأصل "،" method "] [" static "،" method "] [" Foo "،" Bar :: method "] [new Foo،" Bar:: method "]
  • تمت إضافة التوجيه error_log_mode إلى الإعدادات، مما يسمح لك بتحديد وضع الوصول إلى سجل الأخطاء.

المصدر: opennet.ru

إضافة تعليق