繁体   English   中英

PHP 引用成员 function

[英]PHP reference to a member function

在PHP中,我想参考一个成员function。

对于一般功能,我可以将 function 分配给一个变量,如下所示:

php > function h1() {echo "h1";}; h1();
h1
php > function h2() {echo "h2";}; h2();
h2
php > $hh = h1; $hh(); // ok: assign to a variable and call
h1
php > $hh = h2; $hh(); // ok: assign to a variable and call
h2

如果您想将 function 作为参数传递给另一个 function,这很有用。

但是成员函数呢?

class C { 
    function k(){ echo "k";}
    function j(){ $a = $this->k; $a();} // assign k() to a variable
    function m(){ $a = "k"; $this->$a();} // assign the name "k" to a variable
};

这有效:

php > $c = new C();
php > $c->k();
k
> $c->m(); // variable-function approach
k

但这没有(在 CLI 中测试)

php > $c->j();
Warning: Uncaught Error

我的语法是错误的,还是变量函数方法是唯一的方法?

function j(){ $a = $this->k; $a();} // assign k() to a variable

这里有点误会。 即将 class 属性k的值分配给$a 这与 class 成员k()不同。 如果k不作为 C 的C属性存在,则$a的值将为NULL

将其更改为您可能认为的k() ,但这只是分配k()的返回,而不是 function 本身的内容。

I think this might help: What is the scope of a PHP function defined within a PHP anonymous function?

我写了一个简单的例子来说明这里发生了什么。 在您的示例中,内部 function(方法)从外部 scope 调用不存在的 function k() ,这就是出现致命错误的原因。

function k() {
    return 'k()';
}

class C {
    function k(){ return 'C->k()';}
    function l(){ return 'C->l()';}

    function g(){ return k();}
    function h(){ return l();}
};

$c = new C();

print($c->k()); //C->k()

print($c->g()); //k()

print($c->h()); //PHP Fatal error:  Uncaught Error: Call to undefined function l()

简单的解决方法是使用complex callables

class C {
    function l(){ return 'C->l()';}

    function i(){
        $callable = array($this,'l');
        return $callable(); }
};

$c = new C();

print($c->i()); // C->l()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM