callback függvény - PHP bug?
preg_replace_callback-et próbáltam használni, akkor futottam bele egy érdekességbe: ha egy metódusból használom, adódnak vele gondok. Gondolom, ezek érvényesek valamennyi callback fv.-t használó eszközre.
Anonim callback függvényből nem tudok példányváltozóra hivatkozni, mert
"PHP Fatal error: Using $this when not in object context in..."
üzenetet kapok.
Az már csak a user notes-okból derült ki, hogy statikus metódusra sem lehet a self::metodus() formában hivatkozni, csak Osztálynév::metodus() működik.
Van erre a működésre valami ésszerű magyarázat?
■ Anonim callback függvényből nem tudok példányváltozóra hivatkozni, mert
"PHP Fatal error: Using $this when not in object context in..."
üzenetet kapok.
Az már csak a user notes-okból derült ki, hogy statikus metódusra sem lehet a self::metodus() formában hivatkozni, csak Osztálynév::metodus() működik.
Van erre a működésre valami ésszerű magyarázat?
callback pseudo-type
http://www.php.net/manual/en/language.pseudo-types.php#language.types.callback
Callback-ként nem csak függvény nevet adhatsz át, hanem tudsz hivatkozni egy osztály metódusára, egy példányosított objektum metódusára
Függvény
call_user_func('my_callback_function')
Statikus metódus
call_user_func(array('MyClass', 'myCallbackMethod'));
Objektum metódus
call_user_func(array($obj, 'myCallbackMethod'));
; itt ugye$obj
helyére akár írhatsz$this
-t is.A
preg_replace_callback
esetén ezek persze így módosulnakFüggvény
preg_replace_callback( $pattern, 'my_callback_function')
Statikus metódus
preg_replace_callback( $pattern, array('MyClass', 'myCallbackMethod'));
Objektum metódus
preg_replace_callback( $pattern, array($obj, 'myCallbackMethod'));
Szerintem nem jól érted.
Tudom használni (doksit is megnéztem), csak nem értem, hogy miért úgy van, ahogy...
Hogy miért gondolja a PHP egy objektum metódusában meghívott anonim callback függvény belsejében, hogy nem objektumban van?
kontextus
$this
ezekben nem, vagy máshogy érhető el. Főleg azok a nyelvek érintettek ahol a metódus és az objektum között csak gyenge a kapcsolat. Mondjuk jó lenne látni, hogyan is próbáltad meghívni apreg_replace_callback
függvényt (lambda függvénnyel, stringet adsz át, tömböt adsz át, függvényt adsz át).Nálam az OOP környezet
---
Próbálom reprodukálni a tegnapi verziót, de egészen más hibákat kapok... :(
Closure
Anonymous functions
Köszi, de akkor visszatértünk
Nálam csak 5.3 van, itt egyszerűen elhajt, ha a $this-re próbálok közvetlenül hivatkozni.
Példány metódust is úgy kellett meghívni, hogy a callback helyére egy array($this,"metódusnév") paramétert írok.
Szóval működik, csak gusztustalan. :-)
anonymous függvények
:-)
(1-2 év... hol leszek én már akkor... ;-) )
Ne használj anonim
Hát ezek után legalábbis
A másik, hogy performanciában
Ez tény vagy vélemény? Elég
Én arra szavazok, hogy tény.
Egyszerű, tedd ciklusba a két
Az anon függvényekből (ha jól