Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/Magento:empty($object->;property)返回true,尽管属性为String_Php_Magento_Object_Properties - Fatal编程技术网

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

PHP/Magento:empty($object->;property)返回true,尽管属性为String,php,magento,object,properties,Php,Magento,Object,Properties,我使用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-&g

我使用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'
'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);
有一行可以在_数据数组中添加值:

$this->_data[$key] = $value;
所以,当你这样做的时候:

$this->search_field_value

实际上,您正在调用magic方法,该函数在数据数组中搜索输入的值,在本例中是搜索字段值。这就是magento返回空的原因。

我同意,但我正在尝试检查
$This->search\u field\u value
,这是对象的属性,而不是方法。对,但它不是“标准”对象属性,因为您使用方法
setData()
设置了它,并且该属性是虚拟的,不是真实的。它不是硬编码的,是动态的。我没有意识到在这种情况下会有什么不同!我会做一些测试,然后把结果告诉你。谢谢:)。我编写了一个简单的测试,在运行时对虚拟/动态属性集运行的empty()返回false。请看一下这个代码。我不确定Magent是否使用相同的方法创建新属性。谢谢Marko的教育性回答。我已经用_get()做了一个测试,它按预期工作__get()似乎是属性的神奇方法,_call()是方法的神奇方法。我还没查过Magento的密码。
$this->search_field_value