ORM的对象使用数组语法

1). 当前使用的 Laravel 版本?

Laravel8

最近在学laravel框架,在ORM这块的时候,发现一个现象:

$a = Test::where('id', 10)->first(); //id=10存在的
 print_r($a->name);
 print_r($a['name']);

上面运行都正常,我打印过$a是一个模型对象,为什么对象可以使用数组的语法$a[‘name’]?有没有什么坑?大家平时开发的时候是转数组toArray()的还是不转?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

因为 Model 实现了 ArrayAccess 接口(其中一个方法是offsetGet ),所以可以使用 ['xx'] 这种形式来获取属性值。两种方法都可以用,没啥问题。因为 ['xx'] 本质是调用了 getAttribute()->xx 本质也是调用了 getAttribute()

2年前 评论
讨论数量: 13

因为 Model 实现了 ArrayAccess 接口(其中一个方法是offsetGet ),所以可以使用 ['xx'] 这种形式来获取属性值。两种方法都可以用,没啥问题。因为 ['xx'] 本质是调用了 getAttribute()->xx 本质也是调用了 getAttribute()

2年前 评论

可以用,没有坑,但我都是toArray(),感觉比较清晰

2年前 评论

如果 result 要放到 redis 裡面緩存, 我會用 toArray() 轉過, 以 collection 的形式存入緩存會大很多

2年前 评论
fatrbaby

没有坑,但我想问楼主几个问题:

  1. $a->name 多少个字符?
  2. $a['name'] 多少个字符?
  3. $v = $a?->name多少个字符?
  4. $v = $a['name'] ?? null 多少个字符?
2年前 评论
fatrbaby (作者) 2年前
fatrbaby (作者) 2年前
bluememory (楼主) 2年前
fatrbaby (作者) 2年前
bluememory (楼主) 2年前
bluememory (楼主) 2年前
bluememory (楼主) 2年前
ycstar 2年前
MArtian 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!