尝试在使用call_user_func注册的方法上调用method_exists。
<?php
class stdClass1
{
public static $methods = [];
public function __call($method, $arguments) {
return call_user_func_array(Closure::bind(self::$methods[$method], $this, get_called_class()), $arguments);
}
public function __set($name, $value) {
if (is_callable($value)) {
self::$methods[$name] = $value;
} else {
parent::__set($name, $value);
}
}
}
class stdClass2
{
function stdRunMethod()
{
$obj = new stdClass1();
$obj->test = function () {
echo 'a simple function'.PHP_EOL;
};
var_dump(method_exists($obj, "test"));
}
}
$obj = new stdClass2();
$obj->stdRunMethod();
method_exists返回false。如何使用method_exists检查此方法?为什么method_exists返回false?
答案 0 :(得分:1)
因为def myMethod[T <: MyClass : ClassTag]: T =
implicitly[ClassTag[T]].runtimeClass.newInstance().asInstanceOf[T]
println(myMethod[MySubclassA]) // MySubclassA@66d2e7d9
println(myMethod[MySubclassB]) // MySubclassB@1efbd816
不是方法。这是一个存储匿名函数的属性。
如果要检查属性的值是否可以作为函数调用,可以使用test
:
is_callable