分配xpath->;查询和读取长度一步到位


Assign xpath->query and read length in one step

为什么不允许这样做?(我在->length上遇到语法错误):

($x=$xpath->query($s))->length

根据http://php.net/manual/en/language.operators.assignment.php赋值表达式的值就是赋值的值,但在赋值xpath->query的结果时,它似乎不起作用。

我想在while循环中使用该表达式,在该循环中,我将在一个步骤中分配查询结果并检查零长度:

// $xpath is a DOMXPATH object
while(($x=$xpath->query($s))->length){
    // do something with $x
}

我无论如何都不是PHP专家,但据我观察,正是括号和对象运算符->)的组合触发了错误。赋值表达式本身正确地返回DOMNodeList的一个实例,正如我们在给定链接文档时所期望的那样:

$xml = "<person><name>John-Doe</name></person>";
$doc = new DOMDocument();
$doc->loadXML($xml);
$xpath = new DOMXpath($doc);
$test = ($x = $xpath->query("/person/foo"));
//$test contains instance of `DOMNodeList` on which we can use `->` to get the length
echo $test->length;
//but using `->` on parentheses triggers the initial error :
echo ($test)->length;

为了实现实际目标,您可以使用普通的for循环,它在控制循环方面提供了更大的灵活性,而不是使用while。以下片段中的内容:

for($x=$xpath->query($s);
    $x->length;
    $x=$xpath->query($s))
{
    //do something with $x
}

我假设$xpath->query($s)结果在下一次迭代中发生变化,$x->length值降低,因此循环最终将终止。