Setkali jste se někdy s potřebou předefinovat již existující funkci nebo změnit konstantu? PHP něco takového neumožňuje a jsem toho názoru, že to je dobře – většinou to svědčí o špatném návrhu aplikace. S využitím rozšíření Runkit to ale možné je, používat bych to ale doporučoval jen ve speciálních případech (například skript, který generuje PHP kód a následně s ním manipuluje), rozhodně ne pro řešení běžných úloh.
<?php // příklad převzatý z PHP dokumentace function testme() { echo "Original Testme Implementation\n"; } testme(); runkit_function_redefine('testme', '', 'echo "New Testme Implementation\n";'); testme(); ?>
Předefinování se nedá použít při zapnuté direktivě runkit.internal_override dá použít i pro rozšíření možností vestavěné PHP funkce, kterou používá již hotový kód. Stejně mi ale přijde lepší napsat si funkci vlastní a v kódu to změnit. Pak je ale také potřeba zajistit, aby se tato funkce používala i v budoucím kódu.
Od PHP 5.1 je podporovaný také sandboxing – v rámci PHP kódu lze spustit nový interpret, takže např. díky funkci runkit_lint_file je možné zkontrolovat syntaxi souboru s PHP kódem. V PHP 5.0 k tomuto účelu sloužila funkce php_check_syntax, ale pravděpodobně proto, že zamořovala tabulku funkcí (funkce definované v kontrolovaném souboru byly viditelné navenek a naopak), byla v PHP 5.0.5 opět vyňata. Standardní možností kontroly syntaxe souboru tak zůstává php -l
.
Diskuse je zrušena z důvodu spamu.