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


PHP/Magento: empty($object->property) returns true despite property is String

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

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

在parent.phtml文件中。

然后,在child.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'

为什么只有在将对象的属性分配给变量后,对象的属性才会被识别为非空?

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

实际上,您正在调用magic方法call,该函数在dataarray中搜索输入的值,在我们的例子中是searchfieldvalue。这就是为什么magento返回空的原因。