O knihovně PHP_Compat, která dovoluje používat nové funkce i ve starých verzí PHP, jsem již psal. Tato knihovna ale neumožňuje přidávat existujícím funkcím nové parametry. Něco takového je totiž možné jen se speciálními rozšířeními jako je APD nebo Runkit.
Takto by se např. vytvořila podpora nových parametrů u funkcí md5 a microtime:
<?php rename_function('md5', '_md5'); override_function('md5', '$str, $raw_output = false', 'return ($raw_output ? pack("H*", _md5($str)) : _md5($str));'); rename_function('microtime', '_microtime'); override_function('microtime', '$get_as_float = false', 'return (!$get_as_float ? _microtime() : preg_replace("~(.+) (.+)~e", "\\\\1+\\\\2", _microtime()));'); ?>
Někoho by možná napadlo použít místo funkce override_function běžnou definici uživatelské funkce. To ale bohužel nejde, protože v době kompilace původní funkce ještě existuje. Samozřejmě by ale bylo možné funkci vytvořit pod jiným názvem a následně ji přejmenovat.
Použít by šly i funkce runkit_function_rename a runkit_function_redefine, ty mi ale na Windows padají.
Nikomu bych tento postup nedoporučoval používat pro cokoliv jiného, než emulaci parametrů z novějších verzí, za vzniklý zmatek to nestojí.
Diskuse je zrušena z důvodu spamu.