奇怪,我能做到
<?php
$foo = function($a){
return $a;
};
var_dump($foo(123));
但是在一个classe的范围内如果做:
<?php
class Totalizer{
public $count;
public function __construct(){
$this->count = function($product){
return $product;
};
}
}
$foo = new Totalizer;
var_dump($foo->count(123));
致命错误:调用未定义的方法Totalizer :: count()
我的问题是我怎么能像第一个片段那样做,但是在课堂范围内?
ps:PHP 5.5
答案 0 :(得分:1)
PHP目前不允许直接调用存储为对象属性的函数。
它允许对象的属性和方法实际具有相同的名称。
此问题的一个suggested solution来自另一个几乎相同的问题
class Totalizer
{
public $count;
public function __construct()
{
$this->count = function ($product) {
return $product;
};
}
public function __call($method, $args)
{
if (is_callable(array($this, $method))) {
return call_user_func_array($this->$method, $args);
} else {
// else throw exception
}
}
}
答案 1 :(得分:0)
HI这可以通过使用__call魔术方法完成,它将绕过胎儿错误
当我们尝试访问某些未定义的方法时调用__调用方法,我认为
它可能对你有帮助.......
类累加器 {
public $ count;
public function __construct()
{
$this->count = function ($product) {
return $product;
};
}
public function __call($method, $args)
{
if ($method=="count") {
} else {
echo "Error ! method not foound!";
}
}
}
$ foo = new累加器; 的var_dump($ foo-&GT;计数(123));
答案 2 :(得分:-2)
<?php
class Totalizer{
public function __construct(){
}
public function product( $count ) {
if( is_int( $count ) )
return $count;
else
return false;
}
}
$foo = new Totalizer;
var_dump($foo->product(123));