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

错误:

从空值创建默认对象

代码:

$res->success = false;

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


当前回答

如果您有数组并向其添加对象,请尝试此方法。

$product_details = array();

foreach ($products_in_store as $key => $objects) {
  $product_details[$key] = new stdClass(); //the magic
  $product_details[$key]->product_id = $objects->id; 
   //see new object member created on the fly without warning.
}

这将发送数组对象供以后使用~!

其他回答

在PHP 7中,匿名对象可以这样创建:

$res = new class {
    public $success = false;
};

https://www.php.net/manual/en/language.oop5.anonymous.php http://sandbox.onlinephpfunctions.com/code/ab774707a8219c0f35bdba49cc84228b580b52ee

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

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

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

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

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

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

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

如果你在行首放了“@”字符,那么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

我在开发时使用这个技巧。我不喜欢禁用所有警告消息,因为如果你不正确处理警告,那么他们将成为一个大错误在未来。

首先你认为你应该创建对象 $res = new \stdClass(); 然后给object赋值为key和value $res->success = false;

如果您有数组并向其添加对象,请尝试此方法。

$product_details = array();

foreach ($products_in_store as $key => $objects) {
  $product_details[$key] = new stdClass(); //the magic
  $product_details[$key]->product_id = $objects->id; 
   //see new object member created on the fly without warning.
}

这将发送数组对象供以后使用~!