Я пытаюсь продлить SimpleXMLElement класс, чтобы обеспечить механизм для слияния суб XML строки или другого SimpleXMLElement в мой SimpleXMLElement, код для этого основан на код, написанный Карлосом Сото в ответе на вопрос «PHP — SimpleXML — AddChild с другим элементом SimpleXMLElement».
Пока я добавляю только addXml
функция в подклассе (должна работать аналог встроенной addChild
возвращая только что созданный элемент), но я предполагаю, что каждый вызов функции будет возвращать SimpleXMLElement а не мой недавно созданный подкласс. Есть ли способ снижения в PHP, сравнимый с Java?
редактировать как кто-то думал, чтобы понизить голос без какой-либо причины: Я не Java-разработчик, и обычно я не возражаю, даже с такой проблемой, но SimpleXMLElement это класс PHP, поэтому я не могу легко обернуть его без написания большого количества кода. Может быть, какая-то магия отражения делает это возможным?
Когда вы расширяете от SimpleXMLElement родительские методы дадут вам ваш новый тип:
class MyXml extends SimpleXMLElement
{
}
$xml = new MyXml('<root />');
$child = $xml->addChild('child');
var_dump(get_class($child)); # string(5) "MyXml"
Это специфично для SimpleXMLElement а не PHP вообще. Так что вы всегда должны попробовать. Это то, что человек, который прокомментировал ваш вопрос, пытался вам сказать.
Рядом с этим simplexml_import_dom
функция имеет второй параметр, для которого вы можете назвать имя класса. Вы также можете передать SimpleXMLElement для этого объекта PHP также будет брать имя класса из экземпляра.
Других решений пока нет …