错误:当我保存并更新值时,Laravel从空值创建默认对象。
在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不兼容导致的。
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”的错误。