我正在调试PHP5.4中的服务定位器和代理对象,错误是Reflection无法从预定义的类方法中正确获取参数,但是从用户定义的方法中运行良好。
示例:
# proxy class
# arguments are pre-populated
$rc = new ReflectionClass('PDOStatement');
var_dump($rc->getMethod('fetchAll')->getParameters());
会打印
array (size=3)
0 => &
object(ReflectionParameter)[5]
public 'name' => string 'how' (length=3)
1 => &
object(ReflectionParameter)[6]
public 'name' => string 'class_name' (length=10)
2 => &
object(ReflectionParameter)[7]
public 'name' => string 'ctor_args' (length=9)
该名称与http://php.net/manual/en/class.pdostatement.php
中的文档明显不同public array fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] )
ArrayObject中更多失败,缺少2个参数
# service locator
# arguments (__construct) are pre-populated
$rc = new ReflectionClass('ArrayObject');
var_dump($rc->getConstructor()->getParameters());
会打印
array (size=1)
0 => &
object(ReflectionParameter)[4]
public 'name' => string 'array' (length=5)
文档http://php.net/manual/en/class.arrayobject.php
public __construct ([ mixed $input = [] [, int $flags = 0 [, string $iterator_class = "ArrayIterator" ]]] )
有没有办法获得预定义类方法的真实参数? 请不要讨论反模式服务定位器。
感谢