日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

php學習Eloquent修改器源碼示例解析

瀏覽:35日期:2022-06-14 08:12:55
目錄引言Demo源代碼總結引言

感覺好長時間沒寫東西了,一方面主要是自己的角色發生了變化,每天要面對各種各樣的事情和突發事件,不能再有一個完整的長時間讓自己靜下來寫代碼,或者寫文章。

另一方面現在公司技術棧不再停留在只有 Laravel + VUE 了,我們還有小程序、APP 等開發,所以我關注的東西也就多了。

接下來我還是會繼續持續「高產」,把寫技術文章當作一個習慣,堅持下去。

好了,廢話不多說,今天來說一說「Eloquent: 修改器」。

一直想好好研究下 Eloquent。但苦于 Eloquent 有太多可研究的,無法找到一個切入點。前兩天看一同事好像對這個「Eloquent: 修改器」了解不多,所以今天就拿它作為入口,扒一扒其實現源代碼。

首先還是拿一個 Demo 為例:

Demo<?phpnamespace 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); }}

這個代碼比較簡單,就是通過已有屬性 birthday,計算 Baby 幾歲了,得到 age 屬性。

前端就可以直接拿到結果:

return $baby->age;

同樣的,還有 setXxxAttribute 方法來定義一個修改器。

源代碼

讀代碼還是從使用入手,如上通過 $baby->age 調用 age 屬性,這個屬性沒在類中定義,所以只能通過 PHP 的魔術方法 __get() 調用了。

我們看看 Model 類的 __get() 方法:

/** * 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); } ...}

重點自然就在第二個 if 上,主要判斷 attributes 數組中是否包含該屬性,如果沒有,則會執行函數 $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');}

這就對上了我們的 Demo 中自定義的函數 getAgeAttribute(),也就返回 true 了。

接下來就是執行函數 $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);}

好了,到此我們基本就知道了獲取自定義 Attribute 的流程了。

相信解析 set XxxAttribute 也是很簡單的。

總結

好長時間沒寫東西了,先從最簡單的入手,練練手。解析 Eloquent 需要費很多腦細胞,接下來的一段時間我會圍繞著這個主題好好研究下去,盡可能的全部解讀一遍::

.|____Capsule| |____Manager.php|____composer.json|____Concerns| |____BuildsQueries.php| |____ManagesTransactions.php|____Connection.php|____ConnectionInterface.php|____ConnectionResolver.php|____ConnectionResolverInterface.php|____Connectors| |____ConnectionFactory.php| |____Connector.php| |____ConnectorInterface.php| |____MySqlConnector.php| |____PostgresConnector.php| |____SQLiteConnector.php| |____SqlServerConnector.php|____Console| |____Factories| | |____FactoryMakeCommand.php| | |____stubs| | | |____factory.stub| |____Migrations| | |____BaseCommand.php| | |____FreshCommand.php| | |____InstallCommand.php| | |____MigrateCommand.php| | |____MigrateMakeCommand.php| | |____RefreshCommand.php| | |____ResetCommand.php| | |____RollbackCommand.php| | |____StatusCommand.php| |____Seeds| | |____SeedCommand.php| | |____SeederMakeCommand.php| | |____stubs| | | |____seeder.stub|____DatabaseManager.php|____DatabaseServiceProvider.php|____DetectsDeadlocks.php|____DetectsLostConnections.php|____Eloquent| |____Builder.php| |____Collection.php| |____Concerns| | |____GuardsAttributes.php| | |____HasAttributes.php| | |____HasEvents.php| | |____HasGlobalScopes.php| | |____HasRelationships.php| | |____HasTimestamps.php| | |____HidesAttributes.php| | |____QueriesRelationships.php| |____Factory.php| |____FactoryBuilder.php| |____JsonEncodingException.php| |____MassAssignmentException.php| |____Model.php| |____ModelNotFoundException.php| |____QueueEntityResolver.php| |____RelationNotFoundException.php| |____Relations| | |____BelongsTo.php| | |____BelongsToMany.php| | |____Concerns| | | |____InteractsWithPivotTable.php| | | |____SupportsDefaultModels.php| | |____HasMany.php| | |____HasManyThrough.php| | |____HasOne.php| | |____HasOneOrMany.php| | |____MorphMany.php| | |____MorphOne.php| | |____MorphOneOrMany.php| | |____MorphPivot.php| | |____MorphTo.php| | |____MorphToMany.php| | |____Pivot.php| | |____Relation.php| |____Scope.php| |____SoftDeletes.php| |____SoftDeletingScope.php|____Events| |____ConnectionEvent.php| |____QueryExecuted.php| |____StatementPrepared.php| |____TransactionBeginning.php| |____TransactionCommitted.php| |____TransactionRolledBack.php|____Grammar.php|____Migrations| |____DatabaseMigrationRepository.php| |____Migration.php| |____MigrationCreator.php| |____MigrationRepositoryInterface.php| |____Migrator.php| |____stubs| | |____blank.stub| | |____create.stub| | |____update.stub|____MigrationServiceProvider.php|____MySqlConnection.php|____PostgresConnection.php|____Query| |____Builder.php| |____Expression.php| |____Grammars| | |____Grammar.php| | |____MySqlGrammar.php| | |____PostgresGrammar.php| | |____SQLiteGrammar.php| | |____SqlServerGrammar.php| |____JoinClause.php| |____JsonExpression.php| |____Processors| | |____MySqlProcessor.php| | |____PostgresProcessor.php| | |____Processor.php| | |____SQLiteProcessor.php| | |____SqlServerProcessor.php|____QueryException.php|____README.md|____Schema| |____Blueprint.php| |____Builder.php| |____Grammars| | |____ChangeColumn.php| | |____Grammar.php| | |____MySqlGrammar.php| | |____PostgresGrammar.php| | |____RenameColumn.php| | |____SQLiteGrammar.php| | |____SqlServerGrammar.php| |____MySqlBuilder.php| |____PostgresBuilder.php| |____SQLiteBuilder.php| |____SqlServerBuilder.php|____Seeder.php

參考

Eloquent: 修改器 https://www.jb51.net/article/177489.htm__get()使用說明 http://php.net/manual/zh/language.oop5.overloading.php#object.get

以上就是php學習Eloquent修改器源碼示例解析的詳細內容,更多關于php Eloquent修改器的資料請關注好吧啦網其它相關文章!

標簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品普通话对白| 亚洲激情久久| 欧美日韩四区| 欧美一区二区三区高清视频 | 国产精品极品在线观看| 日韩在线麻豆| 日韩国产欧美三级| 国产亚洲精aa在线看| 久久精品72免费观看| 欧美亚洲自偷自偷| 国产精品最新| 麻豆精品99| 国产精品久久久久久久久久10秀 | 在线一区免费观看| 国产高清一区二区| 亚洲男女av一区二区| 亚洲夜间福利| 国产模特精品视频久久久久| 亚洲尤物在线| 日韩欧美2区| 国产精品伦一区二区| 精品中文在线| 日韩一区二区三区在线免费观看| 99久久久久久中文字幕一区| 99视频精品| 亚洲精品自拍| 国产免费久久| 成人国产精品一区二区网站| 国产经典一区| 亚洲一级少妇| 亚洲精华国产欧美| 亚洲一区二区三区在线免费| 日韩一区二区三区在线看| 欧美精品97| 日本高清不卡一区二区三区视频| 亚洲综合不卡| 国产劲爆久久| av一区二区高清| 亚洲精品一二三**| 国产精品1区| 私拍精品福利视频在线一区| 亚洲在线国产日韩欧美| 日韩国产欧美在线视频| 欧美成人a交片免费看| 亚洲福利精品| 国产精品第十页| 91偷拍一区二区三区精品| 好吊一区二区三区| 欧美在线不卡| 91p九色成人| 日韩啪啪电影网| 9国产精品视频| 国产精品亚洲成在人线| 日韩在线观看不卡| 亚洲啊v在线免费视频| 精品国产91| 久久国产精品毛片| 国产一区国产二区国产三区| 亚洲免费福利| 日韩影片在线观看| 亚洲大片在线| 国产精品久久久久av蜜臀| 精品欧美久久| 国产精品成人国产| 亚洲一区欧美二区| 91精品国产自产观看在线 | 国产欧美二区| 久久丁香四色| 一区二区自拍| 婷婷中文字幕一区| 国产精品一区二区三区av麻 | 成人在线视频区| 欧美午夜精品一区二区三区电影| 在线国产日韩| 色一区二区三区| 欧美综合精品| 美日韩精品视频| 都市激情国产精品| 久久精品凹凸全集| 国产精品日韩| 免费一二一二在线视频| 国产日韩一区| 麻豆亚洲精品| 久久亚洲人体| 青青草国产精品亚洲专区无| 婷婷亚洲综合| 精品丝袜在线| 激情综合婷婷| 青青国产精品| 免费不卡在线观看| 国产精品久久久久av电视剧| 日韩高清欧美激情| 亚洲一区日本| 久久九九国产| 91视频久久| 精品伊人久久| 国产伦精品一区二区三区视频 | 国产三级精品三级在线观看国产| 欧美国产91| 韩国精品主播一区二区在线观看| 国产精品高清一区二区| 天堂久久一区| 蜜桃视频一区二区三区| 激情五月色综合国产精品| 日韩成人综合| 国产一区二区三区成人欧美日韩在线观看| 91亚洲无吗| 奇米777国产一区国产二区| 亚洲少妇诱惑| 午夜久久一区| 亚洲精品网址| 不卡在线一区二区| 亚洲欧美日韩高清在线| 99免费精品| 欧美丝袜一区| 欧美日韩国产探花| 欧美不卡高清| 黄色成人在线网址| 国产视频一区欧美| 尹人成人综合网| 婷婷六月综合| 在线亚洲精品| 亚洲综合婷婷| 亚洲综合精品四区| 视频在线观看一区二区三区| 国产精品免费看| 一级成人国产| 911精品国产| 国产精品99精品一区二区三区∴| 日韩av中文字幕一区二区| 国产美女久久| 999精品在线| 免费人成精品欧美精品| 蜜臀久久久久久久| 激情综合在线| 日韩欧乱色一区二区三区在线| 午夜在线视频一区二区区别| 欧美日韩精品一区二区视频| 日韩精品免费一区二区夜夜嗨| 亚洲精品乱码| 国产伦精品一区二区三区视频 | 精品美女在线视频| 精品国产精品久久一区免费式| 久久天堂影院| 日韩欧美国产精品综合嫩v| 人人精品亚洲| 欧美日韩精品一本二本三本| 欧美一级专区| 亚洲精品字幕| 欧美一级全黄| 成人在线黄色| 国产精品99一区二区| 爽好多水快深点欧美视频| 日本免费一区二区视频| 久久精品国内一区二区三区| 国产精品99久久精品| 91精品国产乱码久久久久久久 | 国产99久久| 久久亚洲一区| 欧美日韩亚洲一区| 日韩av有码| 欧美成人综合| 日本久久一区| 国产中文在线播放| 亚洲一区日韩| 久久av免费| 欧美中文字幕一区二区| 免费国产亚洲视频| 里番精品3d一二三区| 欧美日韩尤物久久| 亚洲免费成人av在线| 美女高潮久久久| 少妇久久久久| 日本午夜精品视频在线观看| 日韩成人精品一区| 亚洲欧美网站| 欧美aⅴ一区二区三区视频| 91精品久久久久久久久久不卡| 亚洲永久精品唐人导航网址| 精品视频亚洲| 美女精品在线观看| 另类欧美日韩国产在线| 亚洲黑丝一区二区| 97精品资源在线观看| 99久久亚洲精品蜜臀| 国产麻豆一区二区三区 | 亚洲资源网站| 国产夫妻在线| 日韩精品免费一区二区夜夜嗨| 麻豆国产精品视频| 日韩一级网站| 免费一区二区三区在线视频| 亚洲一级二级| 国产精品久久久网站| 99精品视频精品精品视频| 日韩精品久久久久久| 91精品啪在线观看国产18 | 日本不卡不码高清免费观看 | 亚洲欧美综合| 国产精品亲子伦av一区二区三区|