16

PHPでcall_user_func関数を試してみたところ、次の単純なコードを実行すると次のエラーが発生します。

<?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というクラスの外部で関数を作成すると、正常に機能することはわかっていますが、クラスのprint hiを参照しているため、「this」が登録されていない理由がわかりません。

4

2 に答える 2

27

$this->varあなたの例では評価しprintHiています。ただし、クラスのメソッドを呼び出す場合は、最初の要素がオブジェクトインスタンスで、2番目の要素が関数名である配列としてコールバックを渡す必要があります。

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

有効なコールバックに関するドキュメントは次のとおりです。http ://www.php.net/manual/en/language.types.callable.php

于 2012-11-13T18:12:35.573 に答える
1

Omarの答えの代わりに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();

実例を見る

于 2012-11-13T18:18:57.677 に答える