如何将函数作为param传递给类的本地var

时间:2012-12-13 19:09:42

标签: php

如何将函数作为param传递给类,然后将其分配给本地类的var!

这是我的情景,这可以解决吗?

<?php
class a {
  protected $var;

  function __construct($fun) {
    echo $fun('world'); // This is working perfect
    $this->var = $fun;
  }

  function checkit($x) {
    return $this->var($x);  // This is not working [ Call to undefined method a::var() ]
  }
}
$mth = 'mathm';
$cls = new a(&$mth);    // result [ hello (world) ]

echo $cls->checkit('universe');  // <- not working as it fail

function mathm($i) {
  return 'hello (' . $i . ')';
}
?>

2 个答案:

答案 0 :(得分:0)

return $this-var($x);

需要:

return $this->var($x);

答案 1 :(得分:0)

我认为你在这里有些困惑。从您的代码中,您只将变量的地址(包含字符串“mathm”作为其值)传递给class a的构造函数。引用将保存到实例变量$var(仍然带有字符串值)。然后在你的checkit()中,你试图使用值('mathm'),就好像它是一个函数一样。函数mathm()存在,但不在class a的范围内。所以class a对任何名为mathm的函数的位置一无所知。因此错误。

如果在print_r($this->var);中插入代码行checkit(),您将看到输出是一个简单的字符串,而不是函数的函数或引用。

您可以使用闭包a.k.a匿名函数来传递函数。或者,您可以创建一个包含函数mathm的类,然后传递此类的实例以在类a中使用。

我希望这有帮助!