仅在将我的PHP环境升级到PHP 5.4及更高版本后,我才看到此错误。 错误指向以下代码行:
错误:
从空值创建默认对象
码:
$res->success = false;
我首先需要声明我的$res对象吗?
#1楼
尝试这个:
ini_set('error_reporting', E_STRICT);
#2楼
对于PHP <= 5.3,此消息为E_STRICT 。 从PHP 5.4开始,它很不幸地更改为E_WARNING 。 由于E_WARNING消息很有用,因此您不想完全禁用它们。
要摆脱此警告,您必须使用以下代码:
if (!isset($res))
$res = new stdClass();
$res->success = false;
这是完全等效的替换 。 它可以确保PHP默默地做同样的事情-不幸的是现在发出警告-隐式对象创建。 除非绝对确定不存在,否则应始终检查对象是否已存在。 Michael提供的代码通常不好,因为在某些情况下,根据情况的不同,有时可能已在同一位置将对象定义了。
#3楼
引起此问题的原因是您正在分配一个未启动的对象实例。 例如:
您的情况:
$user->email = 'exy@gmail.com';
解:
$user = new User;
$user->email = 'exy@gmail.com';
#4楼
如果您有数组并向其中添加对象,请尝试此操作。
$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.
}
这将发送对象 数组以供以后使用〜!
#5楼
只是,
$res = (object)array("success"=>false); // $res->success = bool(false);
要么
$res = (object)array(); // object(stdClass)
$res = new stdClass(); // old method
和
$res->success = !!0; // bool(false)
$res->success = false; // bool(false)
$res->success = (bool)0; // bool(false)