Zend_Reflection_Property的isPublic()和其他类似记录和定义的方法在哪里?

时间:2011-05-03 01:04:03

标签: php zend-framework

亲爱的Zend框架专家,

我正在尝试了解Zend Framework API文档的组织方式。例如,请查看以下代码段:

$reflectionClass = new Zend_Reflection_Class($object);
$properties = $reflectionClass->getProperties();
foreach ($properties as $property) {
    if ($property->isPublic()) {
        // do something
    }
}

在Eclipse / PDT中键入此代码时,我注意到Eclipse没有给出代码完成提示,以了解可以调用$ property对象的方法。我希望它列出像isPublic(),isStatic(),...等方法。

所以我转到v1.11 Zend Framework API documentation,这就是它所说的:Zend_Reflection_Class的getProperties()返回一个Zend_Reflection_Property对象数组,它使$ property(在上面的代码中)成为Zend_Reflection_Property。我检查了Zend_Reflection_Property的API文档,但它没有isPublic()方法。事实上,Zend_Reflection_Property只列出了两种方法:getDeclaringClass()和getDocComment()。文档甚至没有告诉你Zend_Reflection_Property是否扩展了另一个类,它可能继承了像isPublic()这样的方法。

接下来,我将转到Zend_Reflection_Property的实际代码。在代码中,我发现Zend_Reflection_Property扩展了ReflectionProperty,因此我假设isPublic()继承自ReflectionProperty。但我找不到ReflectionProperty类的文档来验证这一点。更糟糕的是,我甚至无法通过在Zend目录中执行递归grep来找到定义ReflectionProperty类的代码!

我的问题是:如何找到可用于调用ZF对象的所有方法(包括继承的方法),特别是Zend_Reflection_Property对象(如本例所示)? / p>

这是您希望通过阅读API文档能够回答的问题,对吧?理想情况下,您不必进入库代码来弄清楚如何使用它的类。但我甚至愿意阅读代码 - Zend_Reflection_Property扩展的ReflectionProperty类的代码在哪里?

也许我只是不了解Zend Framework API文档。我非常感谢Zend Framework专家的启发。

提前致谢。

1 个答案:

答案 0 :(得分:3)

ReflectionProperty是一个内置的PHP's Reflection API类。代码不能用作PHP代码,因为它是在PHP中编译的。

您可以通过查看http://php.net/ReflectionProperty轻松找到for的文档。 Zend提供的自动生成的文档(phpDocumentor文档)通常是API可以拥有的最好的文档,Zend也不例外。

Eclipse不会在$property对象上自动完成的原因是因为getProperties返回一个数组。在PHP中,数组可以包含不同类型的各种对象:

$arr = array(new stdClass, new ReflectionProperty);

...使Eclipse无法找出您正在访问的对象/变量的类型,尤其是在循环中。 Eclipse解决这个问题的唯一方法是在每次击键时执行代码,这是非常不切实际的。