我正在使用PHPStorm并编写了一个使用SimpleXML类的类。一切都很好,除非我遍历XML字符串,否则我将收到“Undefined Property”警告。
$xml = simplexml_load_string($string); //Returns SimpleXML Element
echo $xml->childElement; //PHPStorm reports "Undefined Property
我相信这是因为PHPStorm中没有正确定义魔术属性。有人知道一个很好的小工作吗?这让我很烦,因为我很擅长使用干净的代码(和IDE)并且在课堂上出现警告很糟糕!
答案 0 :(得分:10)
到目前为止,我还没有找到解决办法,只是创建了一个具有相关属性的类型,并且var-type-hinting变量:
class myXmlStoredValueObject {
/* @var string */
public $childElement;
}
$xml = simplexml_load_string($string); //Returns SimpleXML Element
/* @var $xml myXmlStoredValueObject */
echo $xml->childElement;
当然,这并不总是适用/切实可行,stdClass
有作弊:
$xml = simplexml_load_string($string); //Returns SimpleXML Element
/* @var $xml stdClass */
echo $xml->childElement;
您无需声明任何具体类型即可使提示消失。
还有其他一些不足之处,您仍然会遇到foreach
的问题,例如,您需要再次使用var-type-hint。
答案 1 :(得分:8)
我想我已经解决了。如果我将花括号内的节点封装为字符串,PHPStorm将忽略这些。
echo $xml->{'Parent'}->{'ChildElement'};
例如,如果您遇到带有连字符的XML标记,则此优势是一致的。 $xml->{'Parent-Node'}
答案 2 :(得分:1)
要摆脱烦人的警告,您可以选择以下几种方法:
1)清晰可读: 在项目中的某个地方定义存根类:
class myXmlPhpRepresentation {
/** @var string */
public $childElement;
/** @var number */
public $anotherXmlProperty;
}
您不需要课程,只需将其放在 IDE索引的项目文件夹。 然后只需使用PhpDoc将该类与SimpleXMLElement“混合”即可:
/** @var myXmlPhpRepresentation|SimpleXMLElement $xml */
$xml = simplexml_load_string($string);
echo $xml->childElement;
这是一个好习惯:您将对XML进行正确定义和可读的php表示, 这将有助于代码自动完成并消除警告。
2)禁止代码行上的非常警告:
/** @noinspection PhpUndefinedFieldInspection */
echo $xml->childElement;
按Alt + Enter进入警告->检查...选项->禁止发表声明
这不是一种很干净的方法,但是检查将帮助您完成项目的其余部分。
3)禁用整个检查。
我认为这是一个不好的做法,但有些检查可能会引起争议。
答案 3 :(得分:0)
由于PHPStorm没有“动态”编译你的代码,如果从外部源加载了该字符串,它就不知道“$ string”中的内容。
如果有什么可以帮助你的话,你可以查看插件存储库: