Laravel 避免 Trying to get property of non-object 错误
阅读目录
- 场景
- 1. 常规方法是使用 isset 加以判断
- 2. PHP7 可以使用 ?? (NULL 合并操作符)
- 3. Laravel 5.5 及以上可以使用 optional 辅助函数
- 4. 使用 object_get 辅助函数
- 5. 使用 data_get 辅助函数
场景
public function res()
{ $user = User::where('id',1)->first();return $user->avatar->url;
}
如果 $user->avatar
为 null
或者不存在,就会引起 (E_ERROR) Trying to get property 'url' of non-object
错误。
1. 常规方法是使用 isset 加以判断
if(isset($user->avatar->url))return $user->avatar->url;
elsereturn 'defaultUrl';
如果在 blade 模板的 echo 中,可以使用:
{{ $user->avatar->url or 'defaultUrl' }}
2. PHP7 可以使用 ?? (NULL 合并操作符)
// 如果 $user->avatar->url 为 null, 返回 'defaultUrl'
return $user->avatar->url ?? 'defaultUrl';
3. Laravel 5.5 及以上可以使用 optional 辅助函数
optional
函数可以接受任何参数,并且允许你访问该对象的属性或者调用方法。如果给定的对象是 null
, 那么属性和方法会简单地返回 null
而不是产生一个错误:
# 如果给定的对象是 null , 那么属性和方法会简单地返回 null 而不是产生一个错误:
return optional($user->avatar)->url;
Laravel 5.7 中,optional 函数还可以接受 匿名函数 作为第二个参数:
/*** 如果第一个参数不为 null, 则调用闭包* 详见 https://laravel\com/docs/5.7/helpers#method-optional*/
return optional(User::find($id), function ($user) {return new DummyUser;
});
4. 使用 object_get 辅助函数
return object_get($user->avatar, 'url', 'default');
这个函数原意是用来已.
语法来获取对象中的属性,例如:
return object_get($user, 'avatar.url', 'default');
也可以达到避免 non-object
错误的效果。
if (! function_exists('object_get')) {/*** Get an item from an object using "dot" notation.** @param object $object* @param string $key* @param mixed $default* @return mixed*/function object_get($object, $key, $default = null){if (is_null($key) || trim($key) == '') {return $object;}foreach (explode('.', $key) as $segment) {if (! is_object($object) || ! isset($object->{$segment})) {return value($default);}$object = $object->{$segment};}return $object;}
}
5. 使用 data_get 辅助函数
return data_get($user, 'avatar.url', 'default');
或
return data_get($user, ['avatar', 'url'], 'default');
以.
语法来获取对象属性或数组元素。
if (! function_exists('data_get')) {/*** Get an item from an array or object using "dot" notation.** @param mixed $target* @param string|array $key* @param mixed $default* @return mixed*/function data_get($target, $key, $default = null){if (is_null($key)) {return $target;}$key = is_array($key) ? $key : explode('.', $key);while (! is_null($segment = array_shift($key))) {if ($segment === '*') {if ($target instanceof Collection) {$target = $target->all();} elseif (! is_array($target)) {return value($default);}$result = [];foreach ($target as $item) {$result[] = data_get($item, $key);}return in_array('*', $key) ? Arr::collapse($result) : $result;}if (Arr::accessible($target) && Arr::exists($target, $segment)) {$target = $target[$segment];} elseif (is_object($target) && isset($target->{$segment})) {$target = $target->{$segment};} else {return value($default);}}return $target;}
}
Laravel 避免 Trying to get property of non-object 错误相关推荐
- Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#Object‘的解决方法...
发现问题 运行一下以前的一个Vue+webpack的 vue仿新闻网站 小项目,报错 由于自己vue学习不深入,老是这个报错,找了好久(确切的说是整整一下午^...^)才找到原因 -v- Uncau ...
- Property 'submit' of object #HTMLFormElement is not a function
今天使用jquery的时候使用脚本提交表单$("#submit").submit(); 然后就出现了:Property 'submit' of object #<HTMLFo ...
- mongoDB add user in v3.0 问题的解决(Property 'addUser' of object admin is not a func)
mongoDB add user in v3.0 问题的解决(Property 'addUser' of object admin is not a func) # 问题:创建mongodb帐户时,出 ...
- python的objectproperty,python中property(lambda self: object())简单解释,,最后4行lambda
python中property(lambda self: object())简单解释,,最后4行lambda 最后4行lambda.问题是:如何运作?它们的含义和结果是什么?您能否以简单的方式显示该声 ...
- Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?
Uncaught TypeError: Cannot read property 'length' of null 错误怎么处理? 1.可能是返回的datagrid数据格式有问题,比如{"t ...
- [jQuery1.9]Cannot read property ‘msie’ of undefined错误的解决方法
[jQuery1.9]Cannot read property 'msie' of undefined错误的解决方法 原文:[jQuery1.9]Cannot read property 'msie' ...
- Cannot assign to read only property 'exports' of object '#Object'
在webpack项目中使用@babel/plugin-transform-runtime时,报错 ERROR in Error: E:\workdata\webpackVue/node_modules ...
- Vue报错:Uncaught TypeError: Cannot assign to read only property ‘exports‘ of object 的解决方法
Vue报错:Uncaught TypeError: Cannot assign to read only property 'exports' of object 的解决方法 参考文章: (1)Vue ...
- [jQuery] Cannot read property ‘msie’ of undefined错误的解决方法
[jQuery] Cannot read property 'msie' of undefined错误的解决方法 参考文章: (1)[jQuery] Cannot read property 'msi ...
- TypeError: Property 'xx' of object xx(0x3bfb34) is not a function
做进刚开始做QtQuick遇到了这个问题,在向QML注册C++对象是出现了这个错误. QML debugging is enabled. Only use this in a safe environ ...
最新文章
- 机器学习算法_机器学习算法中分类知识总结!
- 移动时捕捉不到基点_CAD入门学习攻略:CAD软件中对象捕捉功能使用技巧汇总
- ATSAMD21-XPRO开发板 评估基于 ATSAM D21 CortexM0+ 的微控制器
- linux端口命令是什么意思,cmd和linux的查看端口命令是什么?
- 使用Spring WebFlux进行操作
- LeetCode 2016. 增量元素之间的最大差值
- 【软件工程】系统规划的不同方法
- 运动会成绩管理系统python_基于Eclipse+Mysql+Tomcat+MVC开发得大学运动会管理系统
- bilibili 解析_广西财经大学《殙》舞蹈解析
- PostgreSQL rocks, except when it blocks: Understanding locks
- Uva 12563 - Jin Ge Jin Qu(01背包)
- clover更新驱动 后不能开机_黑苹果安装教程 2020 台式机版(长期更新)
- ping/tracert/telnet
- 汇编---串传送指令MOVS
- 软工网络15团队作业4——Alpha阶段敏捷冲刺之Scrum 冲刺博客(Day1)
- 如何将chm格式转换成HTML网页格式
- 论文笔记:Delving into Data: Effectively Substitute Training for Black-box Attack
- 每个人的商学院--管理基础(第三章:管理工具)--读书笔记
- TikTok跨境电商:TikTok代开英国小店、印尼小店,美国小黄车,广告账户
- Python数据分析实战之一--某网站二手房交易信息(数据处理)
热门文章
- spring Aop中切入点和连接点什么关系?
- 全纯函数导数的几何意义
- 数学中的全微分(方程),全导数(公式),偏微分(方程),梯度,斜率,导数,方向导数等
- PTCRB/GCF 认证测试问题总结
- 腾讯三面:Cookie的SameSite了解吧,那SameParty呢?
- 原厂PL7203大电流3A充电IC
- UserWarning: Usage of dash-separated ‘script-dir‘ will not be supported in future versions. 笔记
- docker 中文文档
- docker swarm 官方文档
- CodecContext-gop_size 是什么