为什么不允许这样做?(我在->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
值降低,因此循环最终将终止。