0

次のサンプルコードがあります

<?php

class Test {
    function foo() {
        print "foo\n";
    }

    function bar() {
        $func = 'foo';
        $func();
    }
}

$test = new Test();
$test->bar()

これは を呼び出し$test-bar()、内部的には という名前の変数 php 関数を呼び出しますfoo。この変数には文字列が含まれておりfoo、関数を here のようfooに呼び出す必要があります。期待される出力を得る代わりに

foo

エラーが発生します:

PHP Fatal error:  Call to undefined function foo()  ...

関数名に文字列を使用する場合、これを正しく行うにはどうすればよいですか? 文字列「func」は、実際のコードのクラス スコープ内のいくつかの異なる関数を表す場合があります。

ドキュメントによると、上記は多かれ少なかれコーディングしたように機能するはずです...

4

3 に答える 3

5
<?php

class Test {
    public function foo() {
        print "foo\n";
    }

    public function bar() {
        $func = 'foo';
        $this->$func();
    }
}

$test = new Test();
$test->bar();

?>

これを使用して、このクラスの現在の関数にアクセスします

于 2013-08-14T17:35:00.540 に答える
0

あなたはキーワードを使用します$this

<?php

class Test {
    function foo() {
        print "foo\n";
    }

    function bar() {
        $this->foo(); //  you can do this

    }
}

$test = new Test();
$test->bar()

文字列入力からメソッドを呼び出す方法は 2 つあります。

$methodName = "foo";
$this->$methodName();

または call_user_func_array() を使用できます

call_user_func_array("foo",$args); // args is an array of your arguments

また

call_user_func_array(array($this,"foo"),$args); // will call the method in this scope
于 2013-08-14T17:28:12.583 に答える