get_called_class (potreti)
- wdolek
- Člen | 331
vidim takovou malou nesrovnalost v dokumentaci (?) nebo sem si vse spatne vysvetlitl… jiz se tu o tom psalo:
https://forum.nette.org/…ss-z-php-5-3
https://forum.nette.org/…od-php-5-2-x
jenze pak vidim dokumentaci: https://api.nette.org/….Object.html#…
a moc nerozumim tomu parametru name a callback. cekal bych, ze „name“ je nove jmeno metody na objektu a callback je … callback. dle prvniho fora to tak (?) asi neni.
konkretni priklad: stahl jsem si Nette.Extras reCAPTCHA od Jake Cooney, https://forum.nette.org/…ha-pro-nette
… pri pridani pole do formulare mi pak Nette vyhodi vyjimku, ze get_called_class neexistuje. puvodni nastaveni z reCAPTCHA bylo:
FormContainer::extensionMethod('addRecaptcha', array('reCAPTCHA', 'addRecaptcha'));
… a to jsem zmenil na
FormContainer::extensionMethod('addRecaptcha', 'reCAPTCHA::addRecaptcha');
ale chyba lavky – $name je parametr prvni… mam tedy napsat:
FormContainer::extensionMethod('FormContainer::addRecaptcha', 'reCAPTCHA::addRecaptcha');
FormContainer::extensionMethod('FormContainer::addRecaptcha', array('reCAPTCHA', 'addRecaptcha'));
?
- wdolek
- Člen | 331
… mimochodem, odpoved zni ano… „FormContainer::addRecaptcha“ :) …
btw: pri brouzdani zdrojaky Nette jsem narazil na takoveto veci
public static function extensionMethod($name, $callback = NULL)
{
if (strpos($name, '::') === FALSE) {
$class = get_called_class();
} else {
list($class, $name) = explode('::', $name);
}
return ObjectMixin::extensionMethod($class, $name, $callback);
}
ackoliv to PHP povoluje, povazuji to za takovou malou „prasarnicku“ – promennou $class bych pred if blok alespon naplnil NULL nebo prazdnym stringem…
- David Grudl
- Nette Core | 8228
wdolek napsal(a):
ale chyba lavky – $name je parametr prvni… mam tedy napsat:
FormContainer::extensionMethod('FormContainer::addRecaptcha', 'reCAPTCHA::addRecaptcha'); FormContainer::extensionMethod('FormContainer::addRecaptcha', array('reCAPTCHA', 'addRecaptcha'));
Je to kvůli vadě PHP < 5.3, kvůli které nelze zjistit, na jaké
třídě je statická metoda volána. Takže ono duplicitní
FormContainer::
je workaround chyby PHP. Ve verzi 5.3 už to není
potřeba uvádět.