PHP 8.3 programming language release

Pagkatapos ng isang taon ng pag-unlad, ang paglabas ng PHP 8.3 programming language ay ipinakita. Kasama sa bagong sangay ang isang serye ng mga bagong feature, pati na rin ang ilang pagbabago na sumisira sa compatibility.

Mga pangunahing pagbabago sa PHP 8.3:

  • Sa panahon ng pag-clone ng klase, posibleng i-reinitialize ang mga property gamit ang attribute na "readonly". Ang pag-overriding sa readonly na mga katangian ay pinapayagan lamang sa loob ng function na "__clone": readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // pinapayagan kahit na ang "createdAt" property ay read-only. } }
  • Ang kakayahang gumamit ng mga constant na may indikasyon ng uri sa mga klase, katangian at enumerasyon ay ibinigay: class Foo { const string BAR = 'baz'; }
  • Nagdagdag ng suporta para sa attribute na "#[Override]," kung saan maaaring ipaalam ng developer sa interpreter na ang minarkahang paraan ay na-override ang ilang parent na paraan. Kung walang override, magpapakita ng error ang interpreter.
  • Binago ang paghawak ng mga negatibong halaga bilang isang array index. Halimbawa, kapag nagdadagdag ng elementong may numerong "-5" sa isang walang laman na array at nagdaragdag ng isa pang elemento, dati ang pangalawang elemento ay na-save na may index na "0", ngunit simula sa bersyon na PHP 8.3 ay mase-save ito sa index na "-4" . $array = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // Ay array (-5 => 'a', 0 => 'b') // Naging array (-5 => 'a', -4 => 'b')
  • Idinagdag ang kakayahang lumikha ng mga anonymous na klase sa read-only na mode: $class = bagong readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Idinagdag ang json_validate() function upang mabilis na masuri kung ang isang string ay nasa JSON na format nang hindi nagsasagawa ng mga operasyon sa pag-decode. json_validate(string $json, int $depth = 512, int $flags = 0): bool
  • Ang mga bagong pamamaraan ay naidagdag sa klase ng Randomizer, na nagbibigay ng mataas na antas ng API para sa pagbuo ng pseudo-random na mga numero at pagkakasunud-sunod: getBytesFromString para sa pagbuo ng string ng isang ibinigay na laki, gamit sa random na pagkakasunud-sunod ng mga character na nasa isa pang string; getFloat at nextFloat upang bumuo ng random na floating point number na nasa loob ng tinukoy na hanay.
  • Nagdagdag ng kakayahang kunin ang mga constant gamit ang dynamic na class syntax: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Dati, para mabawi ang BAR constant, kailangan mong tawagan ang constant(Foo::class . '::' . $name); // Ngayon ay tukuyin lamang ang Foo::{$name};
  • Idinagdag ang henerasyon ng mga indibidwal na pagbubukod (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) kung sakaling magkaroon ng mga problema sa mga operasyong gumagana sa mga petsa at oras.
  • Pinahusay na pangangasiwa ng mga error na nagaganap sa panahon ng pag-parse ng serialized na data sa unserialize() function. Sa kaso ng mga problema, ang unserialize() ay naglalabas na ngayon ng E_WARNING sa halip na E_NOTICE.
  • Ang mga pagbabago ay ginawa sa range() function. Nabubuo ang isang pagbubukod kapag sinusubukang ipasa ang mga bagay, mapagkukunan o array sa mga variable na tumutukoy sa mga hangganan ng hanay, pati na rin kapag tumutukoy ng negatibong halaga sa $step na parameter o isang hindi natukoy na halaga sa anumang parameter. Ang isang listahan ng mga character ay maaari na ngayong maging output kapag tinukoy ang mga string sa halip na mga numero (halimbawa, "range('5', 'z')").
  • Binago ang pag-uugali ng mga katangian na may mga static na katangian, na ngayon ay nag-o-override sa mga static na katangian na minana mula sa parent na klase.
  • Nagdagdag ng mga setting para sa proteksyon ng stack overflow. Ang zend.max_allowed_stack_size at zend.reserved_stack_size na mga direktiba ay idinagdag sa ini file, na tumutukoy sa maximum na pinapayagan at nakareserbang laki ng stack. Mag-crash ang program kapag papalapit na sa stack exhaustion, kapag puno na ang stack kaysa sa pagkakaiba sa pagitan ng zend.max_allowed_stack_size at zend.reserved_stack_size (hihinto ang pagpapatupad bago magkaroon ng segmentation fault). Bilang default, ang halaga ng zend.max_allowed_stack_size ay nakatakda sa 0 (0β€”awtomatikong tinutukoy ang laki; upang hindi paganahin ang limitasyon, maaari mo itong itakda sa -1).
  • Nagdagdag ng mga bagong POSIX function na posix_sysconf(), posix_pathconf(), posix_fpathconf() at posix_eaccess().
  • Ang mb_str_pad function ay naidagdag, na isang analogue ng str_pad() string function, na idinisenyo upang gumana sa mga multi-byte na encoding gaya ng UTF-8.
  • Binibigyang-daan kang lumikha ng mga pagsasara mula sa mga pamamaraan at ipasa ang mga pinangalanang argumento sa mga pagsasara na iyon. $test = bagong Pagsubok(); $closure = $test->magic(…); $closure(a: 'hello', b: 'world');
  • Binago ang pag-uugali kapag pinangangasiwaan ang visibility ng mga constant sa mga interface. interface I { public const FOO = 'foo'; } class C ay nagpapatupad ng I { private const FOO = 'foo'; }
  • Pinalawak ang mga kakayahan ng array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() at proc_get_status().
  • Ang kakayahang magpasa ng negatibong $widths na halaga sa mb_strimwidth() ay hindi na ginagamit. Ang NumberFormatter::TYPE_CURRENCY constant ay inalis. Ang suporta para sa pagtawag sa ldap_connect() function na may dalawang parameter na $host at $port ay hindi na ipinagpatuloy. Inalis ang setting ng opcache.consistency_checks.

Pinagmulan: opennet.ru

Magdagdag ng komento