使用PHP魔术方法实现的带注释的方法不被“hasMethod”识别。
<?php
class SomeClass
{
public function __call($name, $arguments)
{
echo "这是一个魔术方法: $name.\n";
}
public function codedMethod()
{
echo "这是一个已编码的方法.\n";
}
}
$obj = new \SomeClass();
$obj->codedMethod();
$obj->annotatedMethod();
$ref = new ReflectionClass(\SomeClass::class);
echo "SomeClass 拥有 'codedMethod': " . json_encode($ref->hasMethod('codedMethod')) . ".\n";
echo "SomeClass 拥有 'annotatedMethod': " . json_encode($ref->hasMethod('annotatedMethod')) . ".\n";
?>
输出
这是一个已编码的方法。
这是一个魔术方法: annotatedMethod。
SomeClass 拥有 'codedMethod': true。
SomeClass 拥有 'annotatedMethod': false。