【问题标题】:Document dynamic member variables记录动态成员变量
【发布时间】:2012-08-18 14:43:21
【问题描述】:

我用 Doxygen 记录模型类(在 PHP 中)。我使用 Idiorm & Paris 作为 ORM,我希望动态成员变量(直接来自数据库)也出现在生成的文档中。

示例:我有一个模型 Group,其中包含一些使用 Doxygen 记录的方法,例如 isMember()users()。在数据库中,我有一个表group,其中包含一个字段code。在 Idiorm & Paris 中,我可以像这样从 Group 实例 $group 访问它:

$group->code

如何在 Doxygen 中记录 code

编辑:这个问题类似于How to document a variable that isn't really there in Doxygen?,但它是关于动态成员,而不是关于变量。

编辑 2:我不确定术语是否正确。是动态成员变量还是动态属性?

【问题讨论】:

    标签: php doxygen idiorm


    【解决方案1】:

    在设置我知道它们将包含某些数据位的模型时,我通常会做的事情是在模型定义中设置变量。这样可以更轻松地查看我可以使用模型获得哪些类型的数据。

    我没有使用 Idiorm 或 Paris 的经验,但你可以尝试一下。记录变量非常容易,因为它存在。

    【讨论】:

    • 谢谢!请在实施之前测试我的想法 - 一些 ORM 支持这一点,其他不支持。
    • 可以,但是我需要unset()构造函数中的«fake»成员变量。
    【解决方案2】:

    在 Doxygen 中记录不存在的类变量是不可能的吗?我试过裸体

    /** @var User::email string 
      * Email address
      */
    

    在类中没有对应的$email; 成员变量,但 Doxygen 勇敢地忽略了这一点。我没有找到命令或其他东西来强制记录丢失的工件。

    因此我尝试了 creativedutchmen 的建议,但是 Paris 不能很好地处理已经存在的成员变量,因为 - 我认为 - PHP 魔术方法 __get() 不再被触发。我看到了三个可能的修复:

    1. unset() 构造函数中记录的成员变量。使用get_class_vars(get_class($this)),这可以在父类中完成。因为我的模型类都继承自父类,所以这相对简单。
    2. 修改 Paris 以忽略已设置的成员变量,但如果没有 unset(),我看不出如何。
    3. 成员变量的名称略有不同,例如附加下划线,因此它们不会与动态变量冲突。

    可怕的杂物。在运行时做某事或有额外的成员来使文档成为可能?不用了。

    我决定保持现状并仔细记录模型工厂方法。大多数时候,工厂方法包含作为参数的类变量,以便能够设置它们。即使工厂方法没有设置所有的类变量,也可以用散文记录丢失的变量。类文档也是一个不错的选择。

    我将赏金奖励给 creativedutchmen,因为我的想法是开箱即用,即使它最终对我没有帮助,也因为我不希望声望点数丢失。

    tl;dr

    别胡思乱想。在工厂方法或类概述中记录动态成员变量。

    【讨论】:

    • 感谢您的跟进。我自己对 Paris 进行了一些研究,我认为这可能会有所帮助:Paris 确实使用了一个神奇的 __get 函数,但这不应该阻止你发挥你的魔力,如果,这是一个很大的 如果,您将您的财产声明为privateprotected。当然,这大大降低了生成的文档和代码本身的可用性,但也许你可以尝试一下。
    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多