Php / Magento比较运算符总是返回true?

时间:2011-08-04 18:09:36

标签: php string magento comparison

我正在尝试使用简单的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 ?>" />

如果我回应他们,他们显然是不同的。比较是否以某种方式比较它们是否存在并且它们都返回真实?如果是这样,我该怎么做才能将它们作为字符串进行比较?

1 个答案:

答案 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';
}
相关问题