Оператор сравнения Php / Magento всегда возвращает true? - PullRequest
0 голосов
/ 04 августа 2011

Я пытаюсь использовать простое сравнение if, и кажется, что оно всегда отображается как true.

if ($this->helper('catalog/image')->init($_child_products[$i], 'image') == $this->helper('catalog/image')->init($this->getProduct(), 'image', $_image->getFile()) ){
    echo 'true';
}

Я точно знаю, что эти два элемента не равны (если вы не знаете Magento, они используются для получения URL-адресов для изображений продуктов по-разному).

Я использую эти методы в

<img src="<?php $this->helper...etc ?>" />

И если я повторю их, они явно разные. Сравнение так или иначе сравнивает, существуют ли они или нет, и они оба возвращают правду? Если так, как я могу сделать так, чтобы он сравнивал их как строки?

1 Ответ

5 голосов
/ 04 августа 2011

Попробуйте это

var_dump($this->helper('catalog/image')->init($_child_products[$i], 'image'));
var_dump($this->helper('catalog/image')->init($this->getProduct(), 'image', $_image->getFile());

Я предполагаю, что каждый из вышеприведенных операторов var_dump выведет объект PHP в браузер / среду вывода (или может вызвать фатальную ошибку «исчерпание памяти»).если у вас не установлен xDebug).

Теперь попробуйте это

var_dump((string) $this->helper('catalog/image')->init($_child_products[$i], 'image'));
var_dump((string) $this->helper('catalog/image')->init($this->getProduct(), 'image', $_image->getFile());

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

Когда вы приводите эти объекты в виде строк (с (string)), PHP преобразует объект в строку (используя метод __toString, определенный для объекта.

Когда вы используетеобъект в «строковом контексте» (в выражении echo или print, или где-то еще, PHP ожидает строку), PHP автоматически приведёт объект как строку.

Поэтому, если вы хотите выполнить проверку на равенство, приведитесначала объекты в виде строк.

if ((string)$this->helper('catalog/image')->init($_child_products[$i], 'image') == (string)$this->helper('catalog/image')->init($this->getProduct(), 'image', $_image->getFile()) ){
    echo 'true';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...