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()的还是不转?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

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

1年前 评论
讨论数量: 13

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

1年前 评论

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

1年前 评论

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

1年前 评论
fatrbaby

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

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

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