2012-03-12 18 views
5

Estoy usando PHPStorm y he escrito una clase que utiliza la clase SimpleXML. Todo está bien, excepto cuando atravieso una cadena XML, obtengo advertencias de "Propiedad indefinida".PHPStorm y métodos mágicos

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

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

Creo que esto se debe a que las propiedades mágicas no están definidas correctamente en PHPStorm. ¿Alguien sabe de un buen trabajo? Me molesta porque soy pedante sobre tener un buen código limpio (e IDE) y tener advertencias en una clase es horrible.

+0

Si tuviera que anotar su variable $ xml como "var SimpleXMLElement", entonces esperaría que el IDE pudiera reconocer su tipo y permitir el autocompletado de los métodos/propiedades de un objeto SimpleXMLElement. Sin embargo, esto supone además que el IDE tiene una clase SimpleXMLElement especificada en su código "PHP internal". Eclipse PDT (Indigo) * * no parece tenerlo :-( – ashnazg

Respuesta

8

Creo que lo he resuelto. Si encapsulo los nodos dentro de llaves como cuerdas, PHPStorm los ignorará.

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

Esto tiene la ventaja de ser coherente si encuentra una etiqueta XML con un guión, por ejemplo. $xml->{'Parent-Node'}

+0

Sería una buena característica permitir marcar ciertas clases como que contienen propiedades dinámicas ('SimpleXMLElement',' stdClass', 'Zend_View_Interface', etc.) que causaría que PhpStorm ignore propiedades que no conocía. –

+4

Déjeme aclarar esto: está escribiendo código menos legible para que pueda evitar líneas onduladas en su IDE, incluso aunque funcionalmente no crea ningún problema? – Oddman

0

Como PHPStorm no está compilando su Código "sobre la marcha", no sabe lo que hay en "$ string" si cargó esa Cadena desde una fuente externa.

Usted puede mirar en el complemento repositorio si hay algo que le ayuda a cabo:

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

10

no he encontrado una solución temporal hasta ahora, pero sólo la creación de un tipo con las propiedades en cuestión y var mecanografíe-dando a entender la variable:

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

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

/* @var $xml myXmlStoredValueObject */ 

echo $xml->childElement; 

Naturalmente, esto no siempre es aplicable/factible, hay un truco con stdClass:

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

/* @var $xml stdClass */ 

echo $xml->childElement; 

No necesita declarar ningún tipo concreto para que la sugerencia desaparezca.

Hay otras deficiencias, también, todavía se encontrará con problemas con foreach, por ejemplo, donde necesita var-tipo-pista de nuevo.

+0

Las versiones más nuevas de Phpstorm ya no lo necesitan – hakre

Cuestiones relacionadas