Подтвердить что ты не робот

PHP: В чем разница между классом SimpleXMLElement() и SimpleXML_load_string()?

Я видел много кодеров, реализующих SimpleXML_load_string() вместо класса SimpleXMLElement(). Существуют ли какие-либо преимущества для использования первого над последним? Я прочитал руководство по PHP по simplexml. Я не мог понять, что это такое.

Любая помощь и руководство (возможно, с помощью примеров) будут высоко оценены. Спасибо заранее.

4b9b3361

Ответ 1

simplexml_load_string() (как подсказывает название) загружает xml из строки и возвращает объект SimepleXMLElement. Нет никакой разницы между этим и использованием обычного конструктора класса.

Update:

SimpleXML::__construct() имеет дополнительный параметр (третий) bool $data_is_url = false. Если это true, то поведение будет таким же, как simplexml_load_file() (в сочетании с общими общими потоками). Таким образом, обе simplexml_load_*() -функции охватывают ту же функциональность, что и SimpleXML::__construct().

Дополнительные функции simplexml_load_*() имеют второй параметр string $class_name = "SimpleXMLElement", чтобы указать класс возвращаемого объекта. Это не специфическая особенность функций, потому что вы можете "использовать" что-то очень похожее на обычное instanciation тоже

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

Разница между ООП и процедурным подходом заключается в том, что функции возвращают false при ошибке, но конструктор генерирует исключение.

Ответ 2

В основном это удобная обертка. Создавая базовый элемент самостоятельно, вам нужно как минимум две строки кода для выполнения чего-либо. С simplexml_load_string() может быть достаточно одного выражения:

 print simplexml_load_string($xml)->title;

Короче:

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

И, конечно же, есть также небольшое изменение в сигнатуре функции.

Обновление: и точно такая же длина, что и для

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

Ответ 3

simplexml_load_string может возвращать другой объект:

имя_класса

Вы можете использовать этот необязательный параметр, чтобы simplexml_load_string() вернет объект указанного класса. Что класс должен расширить Класс SimpleXMLElement.