PHP: В чем разница между классом SimpleXMLElement() и SimpleXML_load_string()?
Я видел много кодеров, реализующих SimpleXML_load_string()
вместо класса SimpleXMLElement()
. Существуют ли какие-либо преимущества для использования первого над последним? Я прочитал руководство по PHP по simplexml. Я не мог понять, что это такое.
Любая помощь и руководство (возможно, с помощью примеров) будут высоко оценены. Спасибо заранее.
Ответы
Ответ 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.