У меня есть следующий (упрощенный XML):
<?xml version="1.0" encoding="UTF-8" ?> <products> <product> <artnr>xxx1</artnr> </product> </products>
И следующий (снова упрощенный PHP-код):
$xml= @simplexml_load_file($filename); foreach ($xml->product as $product) { if (!$this->validate_xml_product($product)) { continue; } } function validate_xml_product($product) { if (!property_exists('artnr', $product)) { // why does it always validate to true? } }
По какой-то причине продукт никогда не проверяет.
Является ли property_exists правильным способом выяснить, есть ли элемент artnr в $ product?
Порядок параметров в вашем коде отменяется. Правильно сначала объект, затем имя свойства:
if (!property_exists($product, 'artnr')) {
И, по-видимому, это работает только для «реальных» свойств. Если свойство реализовано с использованием метода __get
-Method, это тоже не сработает.
Я думаю, что аргументы скрещены. Первым параметром должен быть класс, второй – свойство …
Использование:
function validate_xml_product($product) { $children=$product->children(); foreach($children as $child){ if ($child->getName()=='artnr') { return true; } } return false; }