ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ PHP 8.3

Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° бСшС прСдставСна вСрсията Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ PHP 8.3. Новият ΠΊΠ»ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡Π²Π° сСрия ΠΎΡ‚ Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ няколко ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°Ρ‚ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π°.

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² PHP 8.3:

  • По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° клас Π΅ възмоТно Π΄Π° сС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ свойства с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° β€žΡΠ°ΠΌΠΎ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅β€œ. Замяната Π½Π° свойства само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° само във функцията β€ž__cloneβ€œ: readonly class 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'; $масив[] = 'b'; var_export($масив); // Π‘Π΅ΡˆΠ΅ масив (-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 $depth = 512, int $flags = 0): bool
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са Π½ΠΎΠ²ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ към класа Randomizer, ΠΊΠΎΠΉΡ‚ΠΎ прСдоставя API Π½Π° високо Π½ΠΈΠ²ΠΎ Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° псСвдослучайни числа ΠΈ послСдоватСлности: getBytesFromString Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π½ΠΈΠ· с Π΄Π°Π΄Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π² случаСн Ρ€Π΅Π΄ Π·Π½Π°Ρ†ΠΈΡ‚Π΅, ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π°Ρ‰ΠΈ Π² Π΄Ρ€ΡƒΠ³ Π½ΠΈΠ·; getFloat ΠΈ nextFloat Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° случайно число с ΠΏΠ»Π°Π²Π°Ρ‰Π° запСтая, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΠΏΠ°Π΄Π° Π² посочСния Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° константи с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° синтаксис Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅Π½ клас: class Foo { const BAR = 'bar'; } $name = 'БАР'; // ΠŸΡ€Π΅Π΄ΠΈ, Π·Π° Π΄Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚Π΅ константата BAR, Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°Ρ‚Π΅ constant(Foo::class . '::' . $name); // Π‘Π΅Π³Π° просто посочСтС Foo::{$name};
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) Π² случай Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‰ΠΈ ΠΏΡ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ с Π΄Π°Ρ‚ΠΈ ΠΈ час.
  • ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‰ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° сСриализирани Π΄Π°Π½Π½ΠΈ във функцията unserialize(). Π’ случай Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ unserialize() Π²Π΅Ρ‡Π΅ ΠΈΠ·Π΄Π°Π²Π° E_WARNING вмСсто E_NOTICE.
  • НаправСни са ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ във функцията range(). Π˜Π·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΏΡ€ΠΈ ΠΎΠΏΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, рСсурси ΠΈΠ»ΠΈ масиви Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ опрСдСлят Π³Ρ€Π°Π½ΠΈΡ†ΠΈ Π½Π° ΠΎΠ±Ρ…Π²Π°Ρ‚, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ посочванС Π½Π° ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π½Π° стойност Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° $step ΠΈΠ»ΠΈ Π½Π΅Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° стойност Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΈ Π΄Π° Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€. Бписък със Π·Π½Π°Ρ†ΠΈ Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ·Π²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ вмСсто числа (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€žΠ΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½('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, която Π΅ Π°Π½Π°Π»ΠΎΠ³ Π½Π° string функцията str_pad(), ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ UTF-8.
  • Позволява Π²ΠΈ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ затваряния ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ Π΄Π° ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅ ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ към Ρ‚Π΅Π·ΠΈ затваряния. $test = Π½ΠΎΠ² тСст(); $closure = $test->magic(…); $closure(a: 'Π·Π΄Ρ€Π°Π²Π΅ΠΉ', b: 'свят');
  • ΠŸΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° видимостта Π½Π° константитС Π² интСрфСйситС. интСрфСйс I { public const FOO = 'foo'; } class C implements 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 Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚Π°. ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° функцията ldap_connect() с Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° $host ΠΈ $port Π΅ прСустановСна. Настройката opcache.consistency_checks Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚Π°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€