Urtebeteko garapenaren ondoren, PHP 8.3 programazio-lengoaiaren bertsioa aurkeztu zen. Adar berriak ezaugarri berri batzuk biltzen ditu, baita bateragarritasuna hausten duten hainbat aldaketa ere.
Funtsezko aldaketak PHP 8.3-n:
- Klaseak klonatzen direnean, orain posible da propietateak "readonly" atributuarekin berriro hastea. Irakurtzeko soilik diren propietateak gainidaztea "__clone" funtzioaren barruan bakarrik onartzen da: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // onartzen da, nahiz eta "createdAt" propietatea irakurtzeko soilik izan. } }
- Klaseetan, ezaugarrietan eta enumerazioetan mota-zehaztapenarekin konstanteak erabiltzeko gaitasuna eskuragarri dago orain: class Foo { const string BAR = 'baz'; }
- "#[Override]" atributuaren laguntza gehitu da, garatzaileari interpretatzaileari markatutako metodo batek guraso-metodo bat gainidazten duela jakinarazteko aukera ematen diona. Gainidatzerik ez badago, interpretatzaileak errore bat sortuko du.
- Balio negatiboak array indize gisa kudeatzeko modua aldatu da. Adibidez, "-5" indizea duen elementu bat array huts bati gehitzean eta gero beste elementu bat gehitzean, bigarren elementua lehenago "0" indizearekin gordetzen zen, baina PHP 8.3tik aurrera, "-4" indizearekin gordeko da. $array = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // Array bat zen (-5 => 'a', 0 => 'b') // Array bihurtu zen (-5 => 'a', -4 => 'b')
- Irakurketa soilik moduan klase anonimoak sortzeko gaitasuna gehitu da: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
- json_validate() funtzioa gehitu da deskodetze eragiketarik egin gabe kate batek JSON formatua betetzen duen azkar egiaztatzeko. json_validate(string $json, int $depth = 512, int $flags = 0): bool
- Metodo berriak gehitu zaizkio Randomizer klaseari, eta honek zenbaki eta sekuentziak pseudo-ausazkoak sortzeko API maila altua eskaintzen du: getBytesFromString, beste kate batetik karaktereak ausaz hautatzen dituen tamaina jakin bateko kate bat sortzeko; eta getFloat eta nextFloat, tarte jakin batean ausazko koma mugikorreko zenbaki bat sortzeko.
- Klase sintaxi dinamikoa erabiliz konstanteak ateratzeko gaitasuna gehitu da: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Lehen, BAR konstantea ateratzeko, constant(Foo::class . '::' . $name); // Orain Foo::{$name}; zehaztu besterik ez duzu egin behar.
- Daten eta orduen eragiketetan arazoak sortzen direnean, salbuespen bereizien sorrera gehitu da (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError).
- unserialize() funtzioan serializatutako datuak parseatzean gertatzen diren erroreen kudeaketa hobetua. Arazoak sortzen badira, unserialize() funtzioak orain E_WARNING kodea itzultzen du E_NOTICE-ren ordez.
- Aldaketak egin dira range() funtzioan. Salbuespen bat sortzen da orain barruti-mugak definitzen dituzten aldagaietan objektuak, baliabideak edo matrizeak pasatzen saiatzean, baita $step parametroan balio negatibo bat edo edozein parametrotan balio definitu gabe bat zehaztean ere. Karaktereen zerrenda bat sortzen da orain zenbakien ordez kateak zehaztean (adibidez, "range('5', 'z')").
- Propietate estatikoak dituzten ezaugarrien portaera aldatu da, eta orain guraso-klasetik heredatutako propietate estatikoak gainidazten dituzte.
- Pila-gainezketaren aurkako babes-ezarpenak gehitu dira. zend.max_allowed_stack_size eta zend.reserved_stack_size direktibak INI fitxategian gehitu dira. Zuzentarau hauek pila-tamaina baimendu eta erreserbatu maximoak definitzen dituzte. Programa errore batekin amaituko da pila agortzear dagoenean, pila zend.max_allowed_stack_size eta zend.reserved_stack_size balioen arteko aldea baino gehiago betetzen denean (exekuzioa segmentazio-errore bat gertatu aurretik geldituko da). Berez, zend.max_allowed_stack_size 0-ra ezarrita dago (0k tamaina automatikoki zehazten dela esan nahi du; -1 ezar daiteke muga desgaitzeko).
- POSIX funtzio berriak gehitu dira: posix_sysconf(), posix_pathconf(), posix_fpathconf() eta posix_eaccess().
- mb_str_pad funtzioa gehitu da, str_pad() string funtzioaren analogoa dena, UTF-8 bezalako byte anitzeko kodeketekin lan egiteko diseinatua.
- Metodoetatik itxierak sortu eta izendatutako argumentuak itxiera horiei pasa daitezke. $test = new Test(); $closure = $test->magic(…); $closure(a: 'hello', b: 'world');
- Interfazeetan konstanteen ikusgarritasuna kudeatzerakoan portaera aldatu da. interface 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() eta proc_get_status() funtzioen gaitasunak zabaldu dira.
- mb_strimwidth()-ri $widths balio negatibo bat pasatzeko gaitasuna zaharkituta dago. NumberFormatter::TYPE_CURRENCY konstantea kendu da. ldap_connect() deitzeko bi parametrorekin, $host eta $port, ez da onartzen. opcache.consistency_checks ezarpena kendu da.
Iturria: opennet.ru
