我有以下(简化的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中是否有artnr元素的正确方法?
答案 0 :(得分:9)
代码中参数的顺序颠倒过来。首先是对象,然后是属性名称:
if (!property_exists($product, 'artnr')) {
显然这只适用于“真实”属性。如果使用__get
- 方法实现该属性,则此方法也不起作用。
答案 1 :(得分:3)
我认为这些论点是相互矛盾的。第一个参数应该是类,第二个是属性......
答案 2 :(得分:1)
使用:
function validate_xml_product($product)
{
$children=$product->children();
foreach($children as $child){
if ($child->getName()=='artnr') {
return true;
}
}
return false;
}