pronto.ee

Tomorrow will be cancelled due to lack of interest

PHP8: create_function() eemaldati

PHP

Ma olen viimased kuu aega PHP8 sees ringi mütanud eesmärgiga aru saada mis sealt uut leiab ja kuidas sellest võimalikult palju kasu lõigata ning olen sealt leidnud päris mitu tähelepanu väärivad asjad. Püüan osadest neist paari sõnaga kirjutada.

Selle konkreetse postituse teemaks on create_function() nimeline funktsioon, õigemini selle puudumine PHP8-s. Algselt lisati see PHP4-le ning selle mõte oli tuua PHP-sse anonüümsed funktsioonid. PHP5-e viimastes versioonides muudeti see kõik juba keele osaks, kuid mingil seletamatul põhjusel jätkas suur hulk arendajaid selle funktsiooni kasutamist vaatamata sellele, et funktsiooni MITTE kasutamiseks oli päris mitu head põhjust; näiteks kasutab nõnda loodud funktsioon globaalset mälu ning seda ei ole võimalik vabastada. Kuna tegemist on jõhkra häkiga kuulutati see PHP 7.2-s eemaldamisele minevaks ning alates PHP8-st kustutati see üldse maha.

Mis omakorda tähendas seda, et kui PHP-s kirjutatud tarkvara kasutas seda funktsiooni tervitab selle kasutajat pärast uuendamist järgmine veateade: Uncaught Error: Call to undefined function create_function() in <fail>. Kuna pahatihti kasutasid seda WordPressi kujunduste ja moodulite kirjutajad tähendas see seda, et pärast PHP versiooni vahetamist loobus nii mõnigi veebisait koostööst. Eriti siis kui tegemist oli pikemat aega toiminud leheküljega ja vaatamata sellele, et platvorm ise oli viimase versiooni peal.

Õnneks on seda probleemi suhteliselt hõlbus parandada. Panen siia ülesse ühe näite. Kõigepeal näide mis PHP8-s EI tööta:

$function = create_function('$a,$b','return $a . \' \' . $b;');
echo $function('Hello', 'World!');

Ja nüüd näide mis töötab:

$function = function($a, $b) {return $a . ' ' . $b;};
echo $function('Hello', 'World!');

Nagu näha on teine näide loetavam, elegantsem ja võtab vähem ressursse. Ning selle juurutamine ei ole üldse keeruline.

Ehk on abiks.

One Comment

Post a comment