我最近创建了一个用于创建HTML元素的类。我没有为每个现有的HTML元素和属性创建方法而烦恼,而是决定使用魔术方法__get和__call。所以使用我的代码我基本上可以这样做:
$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中具有可见性。
答案 0 :(得分:5)
这个问题仍然在未答复的清单中萎缩,所以我打算回答。
在使用__get()
和__call()
等自动魔法方法时,为了获得 PhpStorm 或 Sublime 的良好代码智能,您需要包含{您添加的每个隐式属性或方法的{1}}或@property
行。我知道这很糟糕,但这是使用这些方法的成本。
如果你真的得到了足够的回报,请考虑使用@method
。它可能适合您的应用,在这种情况下它没关系。当我们尝试对对象数据进行进一步处理或抽象时,我们通常会使用它(,例如驼峰式名称转换)。你保存了一些代码(无论如何 PhpStorm 会为你写的代码),但是你需要在课堂上编写 PhpDoc DocBlock 行。
如果没有其他原因,请考虑包括所有行,而不是记录您的课程。使用隐式属性,您不仅难以让IDE知道哪些方法和属性是有效成员,而且还会让下一个维护者变得困难。那些docblock行似乎是多余的,但它们是很好的文档。