[英]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.