只有在将PHP环境升级到PHP 5.4或更高版本后,我才看到这个错误。错误指向这行代码:
错误:
从空值创建默认对象
代码:
$res->success = false;
我首先需要声明我的$res对象吗?
只有在将PHP环境升级到PHP 5.4或更高版本后,我才看到这个错误。错误指向这行代码:
错误:
从空值创建默认对象
代码:
$res->success = false;
我首先需要声明我的$res对象吗?
当前回答
如果你在行首放了“@”字符,那么PHP不会对这行显示任何警告/通知。例如:
$unknownVar[$someStringVariable]->totalcall = 10; // shows a warning message that contains: Creating default object from empty value
为了防止这一行的警告,你必须把“@”字符放在行开头,像这样:
@$unknownVar[$someStringVariable]->totalcall += 10; // no problem. created a stdClass object that name is $unknownVar[$someStringVariable] and created a properti that name is totalcall, and it's default value is 0.
$unknownVar[$someStringVariable]->totalcall += 10; // you don't need to @ character anymore.
echo $unknownVar[$someStringVariable]->totalcall; // 20
我在开发时使用这个技巧。我不喜欢禁用所有警告消息,因为如果你不正确处理警告,那么他们将成为一个大错误在未来。
其他回答
我把以下内容放在出错的PHP文件的顶部,错误不再显示:
error_reporting(E_ERROR | E_PARSE);
我也有类似的问题,这似乎解决了问题。你只需要将$res对象初始化为一个类。假设这里的类名是test。
class test
{
//You can keep the class empty or declare your success variable here
}
$res = new test();
$res->success = false;
得到这个错误的一个简单方法是输入下面的(A),意思是输入(b)
(一)$ this - > - >变量
(b) $ this - > my_variable
微不足道,但很容易被忽视,如果你不去寻找,就很难发现。
首先你认为你应该创建对象 $res = new \stdClass(); 然后给object赋值为key和value $res->success = false;
我在尝试向API返回的对象添加变量时遇到了类似的问题。我用foreach循环遍历数据。
foreach ( $results as $data ) {
$data->direction = 0;
}
这在Laravel中抛出了“从空值创建默认对象”异常。
我用很小的改动就修好了。
foreach ( $results as &$data ) {
$data->direction = 0;
}
通过简单地将$data作为引用。
我希望这能帮助到一些人,因为这让我很烦!