8

我最近创建了一个类来创建 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 发送给最终用户之前对其进行查看。

4

1 回答 1

13

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

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

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

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

于 2015-06-23T15:29:46.790 回答