2012-11-13 5 views
12

Ich spiele nur um mit der call_user_func Funktion in PHP und bin immer diese Fehlermeldung, wenn Sie diesen einfachen Code ausgeführt wird:call_user_func() erwartet 1 Parameter eine gültige Callback seine

<?php 


class A 
{ 

    public $var; 
    private function printHi() 
    { 

     echo "Hello"; 

    } 

    public function __construct($string) 
    { 
     $this->var = $string; 


    } 

    public function foo() 
    { 

     call_user_func($this->var); 

    } 

} 

$a = new A('printHi'); 
$a->foo(); 


?> 

Ich weiß, dass, wenn ich mache eine funktion außerhalb der klasse printHi, es funktioniert gut, aber ich beziehe mich auf die print hi der klasse und nicht sicher, warum das "das" nicht registriert wird.

+1

'call_user_func_array (array ($ this, 'printHi'), array ($ arg1, $ arg2));' – GBD

Antwort

22

$this->var bewertet in Ihrem Beispiel printHi. Allerdings, wenn Sie eine Methode einer Klasse aufrufen, müssen Sie den Rückruf als Array übergeben, wo das erste Element der Objektinstanz ist und das zweite Element ist der Funktionsname:

call_user_func(array($this, $this->var)); 

Hier wird die Dokumentation auf gültig Rückrufe: http://www.php.net/manual/en/language.types.callable.php

+1

add 'weil es eine Methode auf '$ this' ist, keine globale Funktion 'und ich werde +1 –

+0

@BobFincheimer Fertig! –

+0

Vielen Dank !! Das hat geholfen und es funktioniert jetzt. – thed0ctor

1

Alternativ zu Omars Antwort können Sie auch printHi() eine Klasse statische Funktion machen, so dass man dann von call_user_func('A::printHi') nennen kann, wie folgt aus:

class A 
{ 

    public $var; 
    public static function printHi() 
    { 

     echo "Hello"; 

    } 

    public function __construct($string) 
    { 
     $this->var = $string; 


    } 

    public function foo() 
    { 

     call_user_func($this->var); 

    } 

} 

$a = new A('A::printHi'); 
$a->foo(); 

anzeigen

+0

danke für diese Antwort! Das werde ich mir merken – thed0ctor

Verwandte Themen