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” индекси менен сакталат. . $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(string $json, int $depth = 512, int $flags = 0): bool
  • Randomizer классына жаңы методдор кошулду, ал псевдококустук сандарды жана ырааттуулуктарды жаратуу үчүн жогорку деңгээлдеги API камсыз кылат: 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 параметринде терс маанини же кандайдыр бир параметрде аныкталбаган маанини көрсөтүүдө пайда болот. Эми сандардын ордуна саптарды көрсөтүүдө символдордун тизмеси чыгарылышы мүмкүн (мисалы, “аралык('5', 'z')").
  • Статикалык касиеттери бар белгилердин жүрүм-туруму өзгөртүлдү, алар эми ата-энелик класстан мурасталган статикалык касиеттерди жокко чыгарат.
  • Стек толуп кетүүсүнөн коргоо үчүн кошумча орнотуулар. ini файлына zend.max_allowed_stack_size жана zend.reserved_stack_size директивалары кошулуп, максималдуу уруксат берилген жана сакталган стек өлчөмүн аныктайт. Стек 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(); $жабуу = $test->magic(...); $closure(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 жөндөөлөрү алынып салынды.

Source: opennet.ru

Комментарий кошуу