我用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返回空的原因。