2012-03-12 1 views
5

Я использую PHPStorm и написал класс, который использует класс SimpleXML. Все в порядке, кроме случаев, когда я пересекаю XML-строку, я получаю предупреждения «Undefined Property».PHPStorm и методы магии

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

echo $xml->childElement; //PHPStorm reports "Undefined Property 

Я считаю, что это связано с тем, что свойства магии в PHPStorm не определены должным образом. Кто-нибудь знает о небольшой работе? Меня это раздражает, потому что я педантичен о том, что хороший чистый код (и IDE), и предупреждения, возникающие в классе, просто ужасны!

+0

Если вы должны были аннотировать переменную $ xml как «var SimpleXMLElement», я бы ожидал, что среда IDE сможет распознать ее тип и разрешить автозаполнение методов/свойств объекта SimpleXMLElement. Тем не менее, это предполагает, что сама среда IDE имеет такой класс SimpleXMLElement, указанный в коде «Внутренний код PHP». Eclipse PDT (Indigo) делает * not *, похоже, имеет его :-( – ashnazg

ответ

8

Я думаю, что решил. Если я инкапсулирую узлы внутри фигурных скобок в виде строк, PHPStorm проигнорирует их.

echo $xml->{'Parent'}->{'ChildElement'}; 

Это может быть непротиворечивым, если вы столкнулись с XML-тегом с дефисом, например. $xml->{'Parent-Node'}

+0

Было бы неплохой возможностью разрешить маркировку определенных классов как содержащих динамические свойства ('SimpleXMLElement',' SimpleXMLElement', stdClass', 'Zend_View_Interface' и т. д.), из-за чего PhpStorm игнорирует свойства, о которых он не знал. –

+4

Позвольте мне понять, что вы пишете менее читаемый код, чтобы вы могли избегать коротких строк в вашей среде IDE, даже хотя функционально это не создает никаких проблем? – Oddman

0

Поскольку PHPStorm не компилирует ваш код «на лету», он не знает, что находится в «$ string», если вы загрузили эту строку из внешнего источника.

Вы можете посмотреть в Plugin Repository, если есть что-то, что помогает вам:

http://plugins.intellij.net/?webide

10

Я не нашел обходные до сих пор, но только создание типа со свойствами в вопросе и вар -типа-намекая переменную:

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.

+0

Новые версии Phpstorm больше не нуждаются в этом. – hakre

 Смежные вопросы

  • Нет связанных вопросов^_^