PHP / Magento:empty($ object-> property)返回true,尽管property是String

时间:2014-10-06 10:01:26

标签: php magento object properties

我用Magento函数setData设置了一些值:

$this->getChild('childBlockName')->setData('search_field_value', $this->__('field value'));

在父.phtml文件中。

然后,在子.phtml文件中,我尝试获取值:

echo $this->search_field_value.'<br />';
$testvar = empty($this->search_field_value) ? 'empty value':'non empty value';
echo $testvar;

回波:

'field value'
'empty value'

$testvar = $this->search_field_value;
$testvar2 = empty($testvar) ? 'empty value':'non empty value';
echo $testvar2;

回波:

'non empty value'

为什么只有在将对象的属性赋值给变量后才将其识别为非空?

1 个答案:

答案 0 :(得分:1)

这是php函数的问题

empty()

该函数只接受参数。如果你有一些功能:

function getValue(){
    return "hallo";
}

然后尝试做类似的事情:

echo empty(getValue());

你会收到错误,但如果你试图这样做:

$val = getValue();
echo empty($val);

你会毫无错误地得到正确答案。这意味着函数empty()不包括函数返回值,只有变量。

我希望它有所帮助。

对magento的解释:

是的,你是对的,你的代码工作得很好,但是在你的例子中,magento有点不同,因为magento实际上使用了魔术函数和数组:

当你在magento中设置虚拟变量时,它实际上变成了数组的一部分,而不仅仅是像你的例子中的虚拟变量。如果你看一下magento功能

public function setData($key, $value=null);

您可以在_data数组中添加值:

$this->_data[$key] = $value;

所以,当你做这样的事情时:

$this->search_field_value

你实际上正在调用魔术方法__call,该函数在_data数组中搜索输入的值,在我们的例子中是search_field_value。这就是为什么magento返回空的原因。