错误:当我保存并更新值时,Laravel从空值创建默认对象。

6 浏览
0 Comments

错误:当我保存并更新值时,Laravel从空值创建默认对象。

我在将我的PHP环境升级到PHP 5.4及更高版本后才看到这个错误。错误指向以下代码行:

错误:

从空值创建默认对象

代码:

$res->success = false;

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

0
0 Comments

在Laravel中,当保存并更新值时,出现"Creating default object from empty value"的错误。这个错误的原因是在代码中使用了一个空值来创建默认对象。

解决这个问题的方法是使用以下代码来实例化对象并填充值:

$res = (object)array(); // 推荐的方法
$res = (object)[];      // 也可以使用的方法
$res = new \stdClass(); // 老版本的方法

然后可以使用以下代码来填充对象的值:

$res->success = !!0;     // bool(false)
$res->success = false;   // bool(false)
$res->success = (bool)0; // bool(false)

更多信息可以参考:https://www.php.net/manual/en/language.types.object.php#language.types.object.casting

需要注意的是,使用`new stdClass()`这种方式被认为是"old"方法,可能不兼容新版本的PHP。如果你仍然遇到警告,可以尝试使用其他方式来实例化对象。

请问你使用的是哪个版本的PHP?这个问题可能是与新版本的PHP不兼容导致的。

0
0 Comments

Laravel在保存并更新值时出现“Creating default object from empty value”的错误,这个问题的出现原因是在代码中没有检查对象是否已经存在。解决方法是使用以下代码来检查对象是否已经存在:

if (!isset($res)) 
    $res = new stdClass();
$res->success = false;

这段代码是一个完全等效的替代方案。它确保了PHP在默默创建对象时(不幸的是现在变成了警告)做的事情相同。除非你确信对象不存在,否则应该始终检查对象是否已经存在。Michael提供的代码在一般情况下是不好的,因为在某些情况下,对象可能已经在代码的同一位置定义,这取决于具体情况。

另外,如果你不想启用E_NOTICE(因为它会输出太多冗余信息),你可以使用以下代码:

$res = isset($res) ? $res : new stdClass();

这样可以避免出现“Undefined variable: res”的错误。

0
0 Comments

问题的原因是在给对象赋值时,对象可能是空或者未初始化的。这可能是因为在PHP版本<=5.3.x中,新环境可能启用了E_STRICT警告,或者在PHP版本>=5.4中,error_reporting设置为至少E_WARNING。解决方法是在全局命名空间中将对象声明为stdClass的对象。此外,可以使用isset()函数来检查对象是否已经存在。

0