2012-11-13 33 views
12

我只是在PHP中call_user_func功能玩耍和運行這個簡單的代碼,當我得到這個錯誤:call_user_func()預計參數1是一個有效的回調

<?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(); 


?> 

我知道,如果我做一個名爲printHi的類之外的函數,它工作正常,但我指的是類的打印喜,不知道爲什麼「這個」沒有被註冊。

+1

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

回答

22

$this->var在您的示例中正在評估爲printHi。然而,當要調用類的方法時,需要通過回調爲陣列,其中所述第一元件是所述對象實例和所述第二元件是函數名:

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

下面是對文檔的有效的回調:http://www.php.net/manual/en/language.types.callable.php

+1

add',因爲它是'$ this'上的方法,不是全局函數',我會+1 –

+0

@BobFincheimer完成! –

+0

非常感謝!這有幫助,現在它工作。 – thed0ctor

1

或者奧馬爾的回答,您還可以printHi()類的靜態功能,讓你可以再從call_user_func('A::printHi')調用它,就像這樣:

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(); 

live example

+0

感謝您的迴應!我會牢記這一點 – thed0ctor

相關問題