Print_r查找方法的允许值?

时间:2010-07-15 19:52:12

标签: php

我偶然发现了这个页面,它讨论了PHP5附带的非常方便的新反射类,并返回了类的所有方法和属性:

print_r to get object methods in PHP?

接下来,有没有办法确定它返回的方法的允许值?

2 个答案:

答案 0 :(得分:1)

对于某些类中的某些方法,您的意思是确定允许的返回值类型和返回值范围?我想,非常非常难熬。毕竟,没有办法在PHP中定义或提示返回值。所以我可以做到以下几点:

class .... {

function myFunction()
 {
    ... some code ....
   if (condition) return "A";
   .... more code .....
   if (condition2) return 2;
   .... more code ....
   if (condition3) return $_POST["number"];
 }
}

这当然是一个完全搞砸的例子,但你明白我的观点。返回值的可能类型非常难以预测,因为我可以在任何时候返回任何内容。

我认为最好的办法是在文档块中解决这个问题。如果你遵循phpDoc表示法:

/** 
 * @desc Searches for a record.
 * @return int the number of found records.
 */
 function myMethod()
  { ....

当您键入对方法的调用时,许多IDE至少能够提供有关预期返回类型的提示。

答案 1 :(得分:0)

嗯,这取决于你所说的“允许值”。如果它在doc-block中可用,你可以用Reflection找到它...找到返回值:

class foo {
    /**
     * @returns boolean When false
     */
    public function bar($x, $y = 'bar') {
    }
}

$reflector = new ReflectionMethod('foo', 'bar');
$comment = $reflector->getDocComment();
if (preg_match('#@returns (\\S+)#', $comment, $match)) {
    echo "Method returns: ".$match[1];
}

产生

Method Returns: boolean

然后,您只需要从该doc评论中解析出您想要的内容......注意它可以是类型或类(或多个分组,boolean|null|string|DOMNode)...