阅读目录

  • 场景
  • 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->avatarnull 或者不存在,就会引起 (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 错误相关推荐

  1. Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#Object‘的解决方法...

    发现问题 运行一下以前的一个Vue+webpack的 vue仿新闻网站  小项目,报错 由于自己vue学习不深入,老是这个报错,找了好久(确切的说是整整一下午^...^)才找到原因 -v- Uncau ...

  2. Property 'submit' of object #HTMLFormElement is not a function

    今天使用jquery的时候使用脚本提交表单$("#submit").submit(); 然后就出现了:Property 'submit' of object #<HTMLFo ...

  3. 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帐户时,出 ...

  4. python的objectproperty,python中property(lambda self: object())简单解释,,最后4行lambda

    python中property(lambda self: object())简单解释,,最后4行lambda 最后4行lambda.问题是:如何运作?它们的含义和结果是什么?您能否以简单的方式显示该声 ...

  5. Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?

    Uncaught TypeError: Cannot read property 'length' of null 错误怎么处理? 1.可能是返回的datagrid数据格式有问题,比如{"t ...

  6. [jQuery1.9]Cannot read property ‘msie’ of undefined错误的解决方法

    [jQuery1.9]Cannot read property 'msie' of undefined错误的解决方法 原文:[jQuery1.9]Cannot read property 'msie' ...

  7. Cannot assign to read only property 'exports' of object '#Object'

    在webpack项目中使用@babel/plugin-transform-runtime时,报错 ERROR in Error: E:\workdata\webpackVue/node_modules ...

  8. 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 ...

  9. [jQuery] Cannot read property ‘msie’ of undefined错误的解决方法

    [jQuery] Cannot read property 'msie' of undefined错误的解决方法 参考文章: (1)[jQuery] Cannot read property 'msi ...

  10. 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 ...

最新文章

  1. 机器学习算法_机器学习算法中分类知识总结!
  2. 移动时捕捉不到基点_CAD入门学习攻略:CAD软件中对象捕捉功能使用技巧汇总
  3. ATSAMD21-XPRO开发板 评估基于 ATSAM D21 CortexM0+ 的微控制器
  4. linux端口命令是什么意思,cmd和linux的查看端口命令是什么?
  5. 使用Spring WebFlux进行操作
  6. LeetCode 2016. 增量元素之间的最大差值
  7. 【软件工程】系统规划的不同方法
  8. 运动会成绩管理系统python_基于Eclipse+Mysql+Tomcat+MVC开发得大学运动会管理系统
  9. bilibili 解析_广西财经大学《殙》舞蹈解析
  10. PostgreSQL rocks, except when it blocks: Understanding locks
  11. Uva 12563 - Jin Ge Jin Qu(01背包)
  12. clover更新驱动 后不能开机_黑苹果安装教程 2020 台式机版(长期更新)
  13. ping/tracert/telnet
  14. 汇编---串传送指令MOVS
  15. 软工网络15团队作业4——Alpha阶段敏捷冲刺之Scrum 冲刺博客(Day1)
  16. 如何将chm格式转换成HTML网页格式
  17. 论文笔记:Delving into Data: Effectively Substitute Training for Black-box Attack
  18. 每个人的商学院--管理基础(第三章:管理工具)--读书笔记
  19. TikTok跨境电商:TikTok代开英国小店、印尼小店,美国小黄车,广告账户
  20. Python数据分析实战之一--某网站二手房交易信息(数据处理)

热门文章

  1. spring Aop中切入点和连接点什么关系?
  2. 全纯函数导数的几何意义
  3. 数学中的全微分(方程),全导数(公式),偏微分(方程),梯度,斜率,导数,方向导数等
  4. PTCRB/GCF 认证测试问题总结
  5. 腾讯三面:Cookie的SameSite了解吧,那SameParty呢?
  6. 原厂PL7203大电流3A充电IC
  7. UserWarning: Usage of dash-separated ‘script-dir‘ will not be supported in future versions. 笔记
  8. docker 中文文档
  9. docker swarm 官方文档
  10. CodecContext-gop_size 是什么