Nové funkce 2

Školení, která pořádám

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í.

Jakub Vrána, Dobře míněné rady, 24.11.2006, diskuse: 5 (nové: 0)

Diskuse

Martin:

Tyhle obezličky jsou k ničemu. Nikdy není tak špatně, aby bylo nutné používat starou verzi PHP.

finc:

Dobrým způsobem je definovat vlastní funkce. Díky tomu stačí, při přechodu na novější verzi přepsat vždy jen jednu metodu :)
Občas vytvořím celou třídu, ve které definuji metody s pobodnou "tematikou".
<?php
class HTML_Format
{
// funkce na formatovani cisel, textu, apod.
}
?>
atd.

pavel gloss:

Dobrý poznatek, ale nějak mi uniká smysl. Proč používat starší verzi PHP než 5 ?

ikona Jakub Vrána OpenID:

Někdy musí být na serveru PHP 4 kvůli nějakému starému nepřevedenému projektu. A pokud v něm, nebo v nějakém jiném projektu potřebujeme použít novou funkci nebo parametr, přichází ke slovu emulace.

m:

Treba proto, ze nekdo zastava nazor, ze jediny duvod, proc pouzivat PHP, je jeho kompatibilita. A tam to s petkou neni tak horke a clovek stejne nemuze vyuzivat nic, co by stejne nebylo zpetne kompatibilni s PHP 4.

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.