我用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'
为什么只有在将对象的属性赋值给变量后才将其识别为非空?
答案 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返回空的原因。