2014-12-06 133 views
3

我最近创建了一个类来创建HTML元素。通过为每个现有的HTML元素和属性创建一个方法,我决定使用魔术方法__get和__call来代替麻烦。所以,我的代码我基本上可以做到这一点:PHPdoc动态魔术属性(或方法)

$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

1)PHPDoc本身对方法/属性名称没有'* wildcart支持,**全部**。因此您必须手动声明每种方法2)在PhpStorm中,您可以降低此类警告消息的优先级或完全禁用此类检测 – LazyOne 2014-12-06 22:41:39

+0

@LazyOne感谢您的确认! – 2014-12-06 23:22:42

回答

4

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

对于PhpStorm良好的代码智能使用自动神奇的方法,如__get()__call()时崇高,则需要包括@property@method专线为您添加的每个隐含属性或方法。我知道这很糟糕,但这是使用这种方法的代价。

如果你真的得到足够的钱,请考虑使用__get()。这对您的应用可能是正确的,在这种情况下,它可以。当我们试图对对象数据进行进一步处理或抽象时,我们通常会使用它(,例如骆驼案例名称转换)。您可以保存一些代码(其中PhpStorm将为您编写),但您需要在该类中编写PhpDoc DocBlock行。

考虑包括所有的行,如果没有其他原因,比记录你的班级。使用隐式属性,您不仅使IDE难以知道哪些方法和属性是有效的成员,而且会让下一位维护人员感到困难。那些docblock行看起来可能是多余的,但它们是很棒的文档。

+0

感谢最近的答案 - 我有点想通了这一点,并忘记了这个问题:)对于我的具体用例来说,将所有内容添加到DocBlocks是相当困难的,所以我接受IDE集成并不完美,为了代码简单。 – 2015-06-23 21:31:36

+0

罗杰。我发现有时候我会得到诸如session或post变量抽象的类,在这里添加所有@properties将会很荒谬。然而,在其他时候,这很好。如果有一个正则表达式来定义有效的属性名称,它肯定会很好。至少我们可以从o型检测中受益。 – 2015-06-23 21:40:21

+0

绝对同意!在此期间,我会尝试忽略Php风暴中的那些红线,并希望最好:) – 2015-06-24 12:27:56