0

如何将函数作为参数传递给类,然后将其分配给本地类的 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 . ')';
}
?>
4

2 回答 2

0

我认为你在这里混淆了一些东西。从您的代码中,您只是将变量的地址(包含字符串“mathm”作为其值)传递给class a. 引用保存到实例变量$var(仍然带有字符串值)。然后在您checkit()尝试使用该值(“数学”),就好像它是一个函数一样。函数mathm()存在正常但不在class a. 所以class a对任何调用的函数的位置一无所知mathm。因此错误。

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

您可以使用闭包(也称为匿名函数)来传递函数。或者您可以创建一个包含该函数的类,mathm然后传递该类的一个实例以在类 a 中使用。

我希望这有帮助!

于 2012-12-17T15:00:04.757 回答
0
return $this-var($x);

需要是:

return $this->var($x);
于 2012-12-13T19:11:44.457 回答