PHPStorm和魔术方法

Sam*_*ams 6 php phpdoc phpstorm

我正在使用PHPStorm并编写了一个使用SimpleXML类的类.一切都很好,除非我遍历XML字符串,我将得到"Undefined Property"警告.

$xml = simplexml_load_string($string); //Returns SimpleXML Element

echo $xml->childElement; //PHPStorm reports "Undefined Property
Run Code Online (Sandbox Code Playgroud)

我相信这是因为PHPStorm中没有正确定义魔术属性.有人知道一个很好的小工作吗?这让我感到很恼火,因为我对于拥有漂亮干净的代码(和IDE)并且在课堂上出现警告非常可怕!

hak*_*kre 10

到目前为止,我还没有找到解决办法,只是创建一个具有相关属性的类型并且var-type-hinting变量:

class myXmlStoredValueObject {
     /* @var string */
     public $childElement;
}

$xml = simplexml_load_string($string); //Returns SimpleXML Element

/* @var $xml myXmlStoredValueObject */

echo $xml->childElement;
Run Code Online (Sandbox Code Playgroud)

当然,这并不总是适用/可行的,有一个作弊stdClass:

$xml = simplexml_load_string($string); //Returns SimpleXML Element

/* @var $xml stdClass */

echo $xml->childElement;
Run Code Online (Sandbox Code Playgroud)

您不需要声明任何具体类型以使提示消失.

还有其他一些不足之处,您仍然会遇到问题,foreach例如,您需要再次使用var-type-hint.


Sam*_*ams 9

我想我已经解决了.如果我将花括号内的节点封装为字符串,PHPStorm将忽略这些.

echo $xml->{'Parent'}->{'ChildElement'};
Run Code Online (Sandbox Code Playgroud)

例如,如果您遇到带有连字符的XML标记,则这具有一致性的优点. $xml->{'Parent-Node'}

  • 让我直截了当 - 你正在编写不太可读的代码,以便你可以避免IDE中的波浪线,即使在功能上它不会产生任何问题? (5认同)