我有以下(简化的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不是找出$product中是否有artr元素的正确方法吗?
代码中参数的顺序是颠倒的。正确的是首先是对象,然后是属性名:
if (!property_exists($product, 'artnr')) {
显然这只适用于"真正的"属性。如果使用__get
-Method实现属性,这也将不起作用。
我认为争论是交叉的。第一个参数应该是类,第二个参数应该是属性…
http://php.net/manual/de/function.property-exists.php使用说明:
function validate_xml_product($product)
{
$children=$product->children();
foreach($children as $child){
if ($child->getName()=='artnr') {
return true;
}
}
return false;
}