Это ошибка или я не прав? - PullRequest
0 голосов
/ 28 февраля 2011
/**
 * 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.

Итакэто ошибка или полностью избыточный код, или я ошибаюсь?

К вашему сведению: я в настоящее время отлаживаю проблему, когда некоторые элементы конфигурации теряются, и я предполагаю, что ошибка где-то там.

Ответы [ 4 ]

4 голосов
/ 28 февраля 2011

Это странный способ создания такого условия, но я думаю, что это имеет смысл.

$result = назначит результат операции xpath на $result.

Если этот результат равен false (значение, которое xpath() вернет в случае ошибки), условие будет соответствовать, и функция вернет false.

2 голосов
/ 28 февраля 2011

«Поскольку присвоение возвращаемого значения xpath переменной $result всегда возвращает true», это утверждение неверно, и я понятия не имею, почему вы сделали такой вывод. Значение оператора присваивания всегда равно значению, которое было присвоено, поэтому оно может легко быть ложным или истинным (($x = false) == false)

0 голосов
/ 28 февраля 2011

Я считаю, что это помогает заключить в скобки внутреннее назначение следующим образом:

if (! ($result = @$this->_xml->xpath($xpath)) ) {

Визуально задание теперь является подзадачей и должно быть выполнено перед обращением. Без лишних скобок он работает точно так же, это только помогает вашему собственному чтению кода.

Любая команда присваивания возвращает возвращаемое значение. Это позволяет вам делать такие вещи, как:

$a = $b = $c = $d = $e = 'A made-up value';

Новое значение $e возвращается на $d, которое возвращается на $c, и так далее ...

0 голосов
/ 28 февраля 2011

Вы можете проверить это с помощью

var_dump(!$result = FALSE);    // TRUE
var_dump(!$result = array());  // TRUE
var_dump(!$result = array(1)); // FALSE

Так что, если SimpleXml::xpath возвращает пустой массив или FALSE, функция Magento вернет FALSE.Отрицание массива приведёт его к логическому типу. Пустые массивы, типизированные в Boolean, будут FALSE .Это означает, что когда ваш XPath синтаксически правильный, но не нашел никаких результатов, Magento вернет FALSE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...