working simplexmlelement simplexml_load_string simplexml_load_file not new error ejemplo attribute array php xml simplexml

simplexml_load_file - PHP: ¿Cuál es la diferencia entre la clase SimpleXMLElement() y SimpleXML_load_string()?



simplexmlelement php ejemplo (3)

Es sobre todo una envoltura de conveniencia. Al construir el elemento base usted mismo, necesita al menos dos líneas de código para lograr cualquier cosa. Con simplexml_load_string() una sola expresión puede ser suficiente:

print simplexml_load_string($xml)->title;

Es más corto que:

$e = new SimpleXMLElement($xml); print $e->title;

Y luego, por supuesto, también existe una ligera variación en la función de firma.

Actualización: Y exactamente la misma longitud a partir de

print(new SimpleXMLElement($xml))->title;

He visto a muchos codificadores implementar SimpleXML_load_string() lugar de la clase SimpleXMLElement() . ¿Hay algún beneficio al usar el primero sobre el segundo? He leído el manual de PHP en simplexml . No pude lograr comprender de qué se trata.

Cualquier ayuda y orientación (quizás a través de ejemplos) sería muy apreciada. Gracias por adelantado.


simplexml_load_string puede devolver un objeto diferente:

nombre de la clase

Puede usar este parámetro opcional para que simplexml_load_string () devuelva un objeto de la clase especificada. Esa clase debería extender la clase SimpleXMLElement.


simplexml_load_string() (como su nombre sugiere) carga un xml desde una cadena y devuelve un objeto de SimepleXMLElement . No hay diferencia entre esto y usar solo el constructor habitual de la clase.

Actualizar:

SimpleXML::__construct() tiene un parámetro adicional (el tercero) bool $data_is_url = false . Si esto es true el comportamiento es el mismo que simplexml_load_file() (junto con las envolturas de flujo comunes). Por lo tanto, ambas funciones simplexml_load_*() cubren la misma funcionalidad que SimpleXML::__construct() .

Además, las funciones simplexml_load_*() tienen una segunda string $class_name = "SimpleXMLElement" parámetro string $class_name = "SimpleXMLElement" para especificar la clase del objeto que se devolverá. Esa no es una característica específica de las funciones, ya que puede "usar" algo muy similar con la instanciación habitual también

class MyXML extends SimpleXMLElement {} $a = new MyXML($xml); $b = simplexml_load_string($xml, ''MyXML'');

Una diferencia entre la POO y el enfoque de procedimiento es que las funciones devuelven false en caso de error, pero el constructor lanza una Excepción.