好的每隔一段时间我都遇到这个问题。假设我有类似以下的方法
10 public function myMethod($someVar){
11 $myObject = new stdClass();
12 $myObject->myProperty = $this->some_model->get_some_data_as_object();
13 $myObject->myProperty->subProperty = $someVar;
14 }
然后它上面的函数“工作”并且子属性被分配,但有时php会抛出类似下面的警告,而其他时候在以这种方式将属性分配给对象时没有警告。
A PHP Error was encountered
Severity: Warning
Message: Attempt to assign property of non-object
Filename: controllers/MyClass.php
Line Number: 13;
那么为什么有时会发出警告,如何避免这种警告?
编辑:请注意,我说“有效”!属性已分配,转储显示所有值,甚至是subProperty
的值。所以警告说它不喜欢分配财产,但无论如何它都会这样做。
编辑:我需要澄清subProperty
不存在。即它不是第12行所分配数据的一部分。我正在创建属性并在第13行分配值。
答案 0 :(得分:1)
这可能是这个问题
$this->some_model->get_some_data_as_object() // It's was giving non-object
添加检查是否是对象。我们无法将属性分配给非对象
if (is_object($myObject->myProperty->subProperty))
{
$myObject->myProperty->subProperty = $someVar;
}
答案 1 :(得分:0)
$ myObject-> myProperty为null
你必须检查:
if (isset($myObject->myProperty)) {
$myObject->myProperty->subProperty = $someVar;
}
编辑:如果你想检查对象是否属于某个类,你可以这样做:
if (is_a($myObject->myProperty, 'MyPropertyClass')) {
$myObject->myProperty->subProperty = $someVar;
}