Ich sitz echt schon zu lange... :/
Folgenden schnippsel hab ich zum Test geschrieben:
PHP-Code:
class dummy {
public $func = null;
public $geheim = array();
public function __construct( $array ) {
$this->func = $array['type'];
$this->geheim[1] = 'FooBar';
$this->geheim[2] = 'Hallo Welt';
}
public function call( $index ) {
var_dump( $this->func );
call_user_func_array( $this->func , array( $this, $index ) );
}
public function get( $prop ) {
return $this->geheim[$prop];
}
}
//Los gehts
$o = new dummy( array(
'type' =>
create_function(
'$that, $index',
' $self = $that; echo $self->geheim[$index]; '
)
)
);
$o->call(1);
Die Vardumps sind absichtlich drin, die Ausgabe is wie zu erwarten:
Code:
string(11) "�lambda_127" FooBar
In der eigentlichen Klasse, in der das zum Einsatz kommen soll, geht das nicht:
PHP-Code:
//Callback wird im Construktor angelegt:
'callback' => create_function( '',
'echo "Hallo Welt!" ;'
)
//und später aufgerufen
var_dump( $action['callback'] );
call_user_func_array( $action['callback'] , $tmp_args );
Ausgabe:
Code:
string(10) "�lambda_76"
Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, '' was given in D:/...
(Das 'Hallo Welt!' ist erstmal zum Testen drin!);
Der Var_dump zeigt also an, dass es sich hierbei um eine anonyme Funktion handelt, warum aber moniert der dann einen leeren String, anstatt eines Callbacks?
Zwar wird das eigentliche Objekt serialisiert und wieder zurück, aber das hat das Testobjekt auch nicht gestört.
Ich verzweifel hier gleich...