ืฉื—ืจื•ืจ ืฉืคืช ื”ืชื›ื ื•ืช 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'; }
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืชื›ื•ื ืช "#[ืขื•ืงืฃ]", ืฉื‘ืืžืฆืขื•ืชื” ื”ืžืคืชื— ื™ื›ื•ืœ ืœื™ื™ื“ืข ืืช ื”ืžืชื•ืจื’ืžืŸ ืฉื”ืฉื™ื˜ื” ื”ืžืกื•ืžื ืช ืขื•ืงืคืช ืฉื™ื˜ืช ืื‘ ื›ืœืฉื”ื™. ืื ืื™ืŸ ื“ืจื™ืกื”, ื”ืžืชื•ืจื’ืžืŸ ื™ืฆื™ื’ ืฉื’ื™ืื”.
  • ื˜ื™ืคื•ืœ ืฉื•ื ื” ื‘ืขืจื›ื™ื ืฉืœื™ืœื™ื™ื ื›ืื™ื ื“ืงืก ืžืขืจืš. ืœื“ื•ื’ืžื”, ื‘ืขืช ื”ื•ืกืคืช ืืœืžื ื˜ ืขื ืžืกืคืจ "-5" ืœืžืขืจืš ืจื™ืง ื•ื”ื•ืกืคืช ืืœืžื ื˜ ื ื•ืกืฃ, ื‘ืขื‘ืจ ื”ืืœืžื ื˜ ื”ืฉื ื™ ื ืฉืžืจ ืขื ืื™ื ื“ืงืก "0", ืืš ื”ื—ืœ ืžื’ืจืกื” PHP 8.3 ื”ื•ื ื™ื™ืฉืžืจ ืขื ืื™ื ื“ืงืก "-4" . $array = []; $array[-5] = 'a'; $array[] = 'b'; 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 $depth = 512, int $flags = 0): bool
  • ื ื•ืกืคื• ืฉื™ื˜ื•ืช ื—ื“ืฉื•ืช ืœืžื—ืœืงื” Randomizer, ื”ืžืกืคืงืช API ื‘ืจืžื” ื’ื‘ื•ื”ื” ืœื™ืฆื™ืจืช ืžืกืคืจื™ื ื•ืจืฆืคื™ื ืคืกืื•ื“ื• ืืงืจืื™ื™ื: 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 = new Test(); $closure = $test->magic(โ€ฆ); $closure(a: 'hello', b: 'world');
  • ืฉื™ื ื•ื™ ื”ืชื ื”ื’ื•ืช ื‘ืขืช ื˜ื™ืคื•ืœ ื‘ื ืจืื•ืช ืฉืœ ืงื‘ื•ืขื™ื ื‘ืžืžืฉืงื™ื. ืžืžืฉืง I { public const FOO = 'foo'; } class 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 ื”ื•ืกืจ. ื”ืชืžื™ื›ื” ื‘ืงืจื™ืื” ืœืคื•ื ืงืฆื™ื” ldap_connect() ืขื ืฉื ื™ ืคืจืžื˜ืจื™ื $host ื•-$port ื”ื•ืคืกืงื”. ื”ื”ื’ื“ืจื” opcache.consistency_checks ื”ื•ืกืจื”.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”