只有在将PHP环境升级到PHP 5.4或更高版本后,我才看到这个错误。错误指向这行代码:

错误:

从空值创建默认对象

代码:

$res->success = false;

我首先需要声明我的$res对象吗?


当前回答

此问题是由于您正在分配一个未初始化的对象实例而引起的。如:

你的情况:

$user->email = 'exy@gmail.com';

解决方案:

$user = new User;
$user->email = 'exy@gmail.com';

其他回答

我也有类似的问题,这似乎解决了问题。你只需要将$res对象初始化为一个类。假设这里的类名是test。

class test
{
   //You can keep the class empty or declare your success variable here
}
$res = new test();
$res->success = false;

我在尝试向API返回的对象添加变量时遇到了类似的问题。我用foreach循环遍历数据。

foreach ( $results as $data ) {
    $data->direction = 0;
}

这在Laravel中抛出了“从空值创建默认对象”异常。

我用很小的改动就修好了。

foreach ( $results as &$data ) {
    $data->direction = 0;
}

通过简单地将$data作为引用。

我希望这能帮助到一些人,因为这让我很烦!

从PHP 7开始,当变量为空时,可以使用空合并操作符来创建对象。

$res = $res ?? new \stdClass();
$res->success = false;

不,你不需要。当您将成功值添加到对象时,它将创建它。如果没有指定默认类,则继承默认类。

尝试使用:

$user = (object) null;