|
引言
感觉好长时间没写东西了,一方面主要是自己的角色发生了变化,每天要面对各种各样的事情和突发事件,不能再有一个完整的长时间让自己静下来写代码,或者写文章。
另一方面现在公司技术栈不再停留在只有 Laravel + VUE 了,我们还有小程序、APP 等开发,所以我关注的东西也就多了。
接下来我还是会继续持续「高产」,把写技术文章当作一个习惯,坚持下去。
好了,废话不多说,今天来说一说「」。
一直想好好研究下 Eloquent。但苦于 Eloquent 有太多可研究的,无法找到一个切入点。前两天看一同事好像对这个「」了解不多,所以今天就拿它作为入口,扒一扒其实现源代码。
首先还是拿一个 Demo 为例:
Demo
- <?php
- namespace App\Models;
- use Illuminate\Database\Eloquent\Model;
- use Carbon\Carbon;
- class Baby extends Model
- {
- protected $table = 'baby';
- protected $appends = ['age'];
- public function getAgeAttribute()
- {
- $date = new Carbon($this->birthday);
- return Carbon::now()->diffInYears($date);
- }
- }
复制代码 这个代码比较简单,就是通过已有属性,计算 Baby 几岁了,得到属性。
前端就可以直接拿到结果:同样的,还有方法来定义一个修改器。
源代码
读代码还是从使用入手,如上通过调用属性,这个属性没在类中定义,所以只能通过 PHP 的魔术方法调用了。
我们看看类的方法:- /**
- * Dynamically retrieve attributes on the model.
- *
- * @param string $key
- * @return mixed
- */
- public function __get($key)
- {
- return $this->getAttribute($key);
- }
复制代码 好了,我们开始解读源代码了:- /**
- * Get an attribute from the model.
- *
- * @param string $key
- * @return mixed
- */
- public function getAttribute($key)
- {
- if (! $key) {
- return;
- }
- // If the attribute exists in the attribute array or has a "get" mutator we will
- // get the attribute's value. Otherwise, we will proceed as if the developers
- // are asking for a relationship's value. This covers both types of values.
- if (array_key_exists($key, $this->attributes) ||
- $this->hasGetMutator($key)) {
- return $this->getAttributeValue($key);
- }
- ...
- }
复制代码 重点自然就在第二个上,主要判断数组中是否包含该属性,如果没有,则会执行函数- $this->hasGetMutator($key)
复制代码 :- /**
- * Determine if a get mutator exists for an attribute.
- *
- * @param string $key
- * @return bool
- */
- public function hasGetMutator($key)
- {
- return method_exists($this, 'get'.Str::studly($key).'Attribute');
- }
复制代码 这就对上了我们的中自定义的函数,也就返回了。
接下来就是执行函数- $this->getAttributeValue($key)
复制代码 ,进而执行函数:- return $this->mutateAttribute($key, $value);
复制代码- /**
- * Get the value of an attribute using its mutator.
- *
- * @param string $key
- * @param mixed $value
- * @return mixed
- */
- protected function mutateAttribute($key, $value)
- {
- return $this->{'get'.Str::studly($key).'Attribute'}($value);
- }
复制代码 好了,到此我们基本就知道了获取自定义的流程了。
相信解析也是很简单的。
总结
好长时间没写东西了,先从最简单的入手,练练手。解析需要费很多脑细胞,接下来的一段时间我会围绕着这个主题好好研究下去,尽可能的全部解读一遍::参考
以上就是php学习Eloquent修改器源码示例解析的详细内容,更多关于php Eloquent修改器的资料请关注脚本之家其它相关文章!
来源:https://www.jb51.net/program/290576e3y.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|