Laravel 是 PHP 的经典案例、知识宝库、实践案例。
在 Laravel 会发现一些很巧妙,且不常见的 PHP 高级用法,因为没用过,也不知道,看起来确实很神秘。
在 Laravel Model 中,查出的数据,即可用对象属性方式访问,还能用数组方式访问。
查看 vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php 代码发现:
Model.php 实现了 __get() 魔术方法,并实现了 ArrayAccess 接口。
马上查阅下PHP手册,只有针对 ArrayAccess::offsetExists、ArrayAccess::offsetGet、ArrayAccess::offsetSet、ArrayAccess::offsetUnset 的介绍,其实类只要实现这些方法即可。
立刻做个实验:
$name; } public function offsetExists($offset) { // TODO: Implement offsetExists() method. return isset($this->$offset); } public function offsetGet($offset) { // TODO: Implement offsetGet() method. return $this->$offset; } public function offsetSet($offset, $value) { // TODO: Implement offsetSet() method. $this->$offset = $value; } public function offsetUnset($offset) { // TODO: Implement offsetUnset() method. } } $obj = new obj(); echo $obj['name'];
打印结果:
D:\web\test>php class.php peter
在 Laravel 里面大量使用了这种方法,让代码使用起来非常方便,但如果不知道原理,也会带来困扰。