我正在尝试使用简单的if比较,它似乎总是呈现为真。
if ($this->helper('catalog/image')->init($_child_products[$i], 'image') == $this->helper('catalog/image')->init($this->getProduct(), 'image', $_image->getFile()) ){
echo 'true';
}
我知道这两个项目不相同的事实(如果您不了解Magento,他们习惯以不同的方式获取产品图片的网址。)
我在
中使用这些方法<img src="<?php $this->helper...etc ?>" />
如果我回应他们,他们显然是不同的。比较是否以某种方式比较它们是否存在并且它们都返回真实?如果是这样,我该怎么做才能将它们作为字符串进行比较?
答案 0 :(得分:5)
试试这个
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';
}