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" индексээр хадгалагдах болно. . $массив = []; $массив[-5] = 'a'; $array[] = 'b'; var_export ($ массив); // байсан массив (-5 => 'a', 0 => 'b') // массив болсон (-5 => 'a', -4 => 'b')
  • Зөвхөн унших горимд нэргүй анги үүсгэх чадварыг нэмсэн: $class = newly readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Код тайлах үйлдэл хийлгүйгээр мөр нь JSON форматтай эсэхийг хурдан шалгахын тулд json_validate() функцийг нэмсэн. json_validate(string $json, int $depth = 512, int $flags = 0): bool
  • Pseudo-санамсаргүй тоо болон дарааллыг үүсгэх өндөр түвшний API-г хангадаг Randomizer ангид шинэ аргууд нэмэгдсэн: getBytesFromString өөр мөрөнд байгаа тэмдэгтүүдийг санамсаргүй дарааллаар ашиглан өгөгдсөн хэмжээтэй мөр үүсгэх; getFloat болон nextFloat-ийг ашиглан заасан мужид багтах санамсаргүй хөвөгч цэгийн тоог үүсгэнэ.
  • Динамик ангиллын синтакс ашиглан тогтмолуудыг олж авах чадварыг нэмсэн: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Өмнө нь BAR тогтмолыг авахын тулд та тогтмол (Foo::class . '::' . $name); // Одоо зөвхөн Foo::{$name}-г зааж өгнө үү;
  • Огноо, цагтай ажиллахад асуудал гарсан тохиолдолд бие даасан үл хамаарах зүйлүүд (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) нэмэгдсэн.
  • unserialize() функц дэх цуваажсан өгөгдлийг задлан шинжлэх явцад гарч буй алдааг зохицуулах сайжруулсан. Асуудал гарсан тохиолдолд unserialize() одоо E_NOTICE-ийн оронд E_WARNING-г өгнө.
  • 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() нэмсэн.
  • UTF-8 гэх мэт олон байт кодчилолтой ажиллахад зориулагдсан str_pad() string функцийн аналог болох mb_str_pad функц нэмэгдсэн.
  • Аргуудаас хаалт үүсгэх, тэдгээр хаалт руу нэрлэсэн аргументуудыг дамжуулах боломжийг танд олгоно. $test = шинэ тест(); $хаалт = $тест->шидэт(...); $хаалт(a: 'сайн уу', b: 'дэлхий');
  • Интерфейс дэх тогтмолуудын харагдах байдлыг зохицуулах үед зан төлөв өөрчлөгдсөн. интерфэйс I { public const FOO = 'foo'; } анги C хэрэгжүүлдэг I { private const FOO = 'foo'; }
  • array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() болон proc_get_status() функцүүдийн чадамжийг өргөжүүлсэн.
  • Сөрөг $widths утгыг mb_strimwidth()-д дамжуулах боломж хуучирсан. NumberFormatter::TYPE_CURRENCY тогтмолыг устгасан. $host болон $port гэсэн хоёр параметртэй ldap_connect() функцийг дуудах дэмжлэг зогссон. opcache.consistency_checks тохиргоог устгасан.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх