/**
* Returns nodes found by xpath expression
*
* @param string $xpath
* @return array
*/
public function getXpath($xpath)
{
if (empty($this->_xml)) {
return false;
}
if (!$result = @$this->_xml->xpath($xpath)) {
return false;
}
return $result;
}
此代码取自Magento。您可以在公共svn中查看特定文件:
http://svn.magentocommerce.com/source/branches/1.5/lib/Varien/Simplexml/Config.php
现在我认为(!$result = @$this->_xml->xpath($xpath))
永远不会评估为true
,因此return false
语句永远不会发生。
因为xpath的返回值的赋值,无论它对变量$result
是真还是假,总是返回true,否则总是返回false
。
所以这是一个错误或完全冗余的代码,或者我错了?
仅供参考:我正在调试一些问题,其中一些配置元素“丢失”,我认为错误就在那里。
答案 0 :(得分:4)
这是建立这样一个条件的奇怪方式,但我认为这是有道理的。
$result =
会将xpath操作的结果分配给$result
。
如果结果为false
(如果出现错误,xpath()
将返回一个值),则条件将匹配,函数将返回false。
答案 1 :(得分:2)
“因为将xpath
的返回值赋给变量$result
总是返回true”这个陈述是错误的,我不知道为什么你得出这个结论。赋值运算符的值总是等于赋值的值,因此它很容易为假或为真(($x = false) == false
)
答案 2 :(得分:0)
您可以使用
进行测试var_dump(!$result = FALSE); // TRUE
var_dump(!$result = array()); // TRUE
var_dump(!$result = array(1)); // FALSE
因此,如果SimpleXml::xpath
返回空数组或FALSE
,则Magento函数将返回FALSE
。否定数组将首先将其类型化为布尔值。 Empty Arrays typecasted to Boolean will be FALSE。这意味着,当您的XPath在语法上正确但没有找到任何结果时,Magento将返回FALSE
。
答案 3 :(得分:0)
我觉得将内部任务括起来是有帮助的:
if (! ($result = @$this->_xml->xpath($xpath)) ) {
视觉上,赋值现在是一个子任务,必须在被反转之前执行。没有额外的括号,它执行完全相同,这只是帮助您自己的代码阅读。
任何赋值命令都会返回返回的值。这使您可以执行以下操作:
$a = $b = $c = $d = $e = 'A made-up value';
$e
的新值将返回$d
,该值将返回$c
,依此类推......