【问题标题】:PHPdoc for dynamic magic properties (or methods)用于动态魔法属性(或方法)的 PHPdoc
【发布时间】:2015-02-04 20:09:13
【问题描述】:

我最近创建了一个类来创建 HTML 元素。我决定使用魔术方法 __get 和 __call,而不是为每个现有的 HTML 元素和属性创建一个方法。所以用我的代码我基本上可以做到这一点:

$signUpForm->insert->input->type('text')->name('firstName')->maxlength(100)->disabled
$signUpForm->insert->input->type('email')->name('emailAddress')->maxlength(100)

等等

但既然我决定保持这种“魔法”和简单,我也可以这样做:

$signUpForm->insert->magic->trick('rabbit')->accessory('hat') 会导致:

<magic trick='rabbit' accessory='hat'>

这一切都很好,因为在我看来,它减少了很多样板代码,并且完全符合我的需要。我不想要一个类来强制执行 HTML 标准,我想要一个类来促进 HTML,因为你知道如何使用它(老实说,这样做的代码很小)

所以我的问题是,考虑到这个类可以接受任何未定义的属性或方法,有没有办法在 PHPDoc 中指定这种行为?我尝试了以下没有任何运气:

/**
 * @property HtmlElementAttribute *    Insert a new HTML element attribute
 * @method   HtmlElementAttribute *    Insert a new HTML element attribute
 */

我不知道这是否只是 PHPStorm 的事情,但我在任何地方都找不到任何类似的场景......

另外,如果您想知道我为什么要这样做,它是为了跟踪我的 PHP 代码中的某些 HTML 方面(例如,在表单中声明的​​ ID,或在表单中的元素)。这可以让我在发送给最终用户之前查看我的 HTML。

【问题讨论】:

  • 1) PHPDoc 本身对方法/属性名称没有* 通配符支持,根本没有。因此,您必须手动声明每个方法 2)在 PhpStorm 中,您可以降低此类警告消息的优先级或完全禁用此类检查
  • @LazyOne 感谢您的确认!

标签: php phpstorm phpdoc phpdocumentor2


【解决方案1】:

这个问题仍然在未回答的列表中,所以我要回答它。

为了在 PhpStormSublime 中使用 __get()__call() 等自动魔术方法时获得良好的代码智能,您需要包含 @property 或 @您添加的每个隐式属性或方法的 987654324@ 行。我知道这很糟糕,但这是使用这种方法的成本。

在使用__get() 时,请考虑您是否真的物有所值。它可能适合您的应用程序,在这种情况下它很好。我们通常在尝试对对象数据进行进一步处理或抽象时使用它(例如驼峰式名称转换)。您保存了一些代码(PhpStorm 无论如何都会为您编写),但您需要在类中编写 PhpDoc DocBlock 行。

如果没有其他原因,请考虑包括所有行,而不是记录您的课程。使用隐式属性,不仅让 IDE 很难知道哪些方法和属性是有效成员,而且还会让下一个维护者变得困难。这些 docblock 行可能看起来是多余的,但它们是很棒的文档。

【讨论】:

  • 感谢您迟到的答案 - 我现在有点想通了,忘记了这个问题 :) 对于我的特定用例,将所有内容添加到 DocBlocks 中非常困难,所以我接受 IDE 集成为了代码的简单性,它并不完美。
  • 罗杰。我发现有时我有诸如会话或后变量抽象之类的类,在其中添加所有@properties 是荒谬的。然而,在其他时候,它是好的。如果有一个正则表达式选项来定义有效的属性名称,那当然会很好。至少那时我们可以从 type-o 检测中受益。
  • 绝对同意!与此同时,我会尽量忽略 PHP 风暴中的那些红线,并希望最好:)
猜你喜欢
  • 2016-09-29
  • 2015-09-08
  • 2017-04-30
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多