Бир жылдык өнүгүүдөн кийин 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