與 laravel 相較,Yii2 將配置(依賴關係定義)外化,用行爲(更相似於 python 中的織入)類,彌補
Trait
的一些不足,好處是能夠動態擴展動做。至於事件處理則大同小異,有趣的是在命名上,yii2 借用了jquery
事件系統的那一套,on,off,trigger
。固然也相同之處,好比應用都是創建在容器之上。相比其它的面向領域,面向接口編程,Yii2 使用模塊,來分層,分中心小應用,細化大架構。而getter/setter
,及過濾器,java 痕跡太明顯。php
yii\base\Component
類或其子類的實例
yii\base\Object
, 支持屬性(Property)功能\Yii::createObject
靜態方法,建立組件實例
Yii::createObject()
基於依賴注入容器實現java
yii\base\BaseObject
類執行時的生命週期
Yii
引入yii\base\Object
的基類, 支持基於類內的getter
和 setter
(讀取器和設定器)方法來定義屬性(getter 或 setter
的屬性正常調用 property_exists()
將不會生效
canGetProperty()
或canSetProperty()
事件能夠將自定義代碼 「注入」 到現有代碼中的特定執行點python
事件處理器Event Handlers
jquery
'trim'
[$object, $method]
[$class, $method]
function ($event) { ... }
事件對象 $eventlaravel
event name
:事件名event sender
:調用 trigger () 方法的對象custom data
附加事件處理器時傳入的數據,默認爲空附加事件處理器面試
public void on ( $name, $handler, $data = null, $append = true )
事件處理器順序(Event Handler Order)編程
yii\base\Event::event參數的‘yii\base\Event::handled
屬性爲真觸發事件(Triggering Events)json
yii\base\Component::trigger()
方法觸發
public void trigger ( $name, yii\base\Event $event = null )
yii\base\Event
類或其子類的實例移除事件處理器(Detaching Event Handlers)數組
public boolean off ( $name, $handler = null )
類級別的事件處理器yii2
yii\base\Event::on()
在類級別附加處理器
public static boolean off ( $class, $name, $handler = null )
接口事件
Event::on()
並將接口類名做爲第一個參數全局事件
通配符事件 Wildcard Events
行爲是yii\base\Behavior
或其子類的實例,也稱爲 mixins, 相似於原生的 Trait
處理事件
yii\base\Behavior::events()
方法
附加行爲
yii\base\Component::attachBehavior()
方法yii\base\Component::attachBehaviors()
方法一次附加多個行爲
public void attachBehaviors (array $behaviors )
使用行爲
$component->getBehavior('myBehavior');
getBehaviors()
移除行爲
yii\base\Component::detachBehavior()
方法用行爲相關聯的名字實現Yii2 內置行爲類
yii\behaviors\TimestampBehavior
在 Active Record 存儲時自動更新它的時間戳屬性yii\behaviors\BlameableBehavior
使用當前用戶 ID 自動填充指定的屬性yii\behaviors\SluggableBehavior
自動填充指定的屬性,其值能夠在 URL 中用做 slugyii\behaviors\AttributeBehavior
在發生特定事件時自動爲 ActiveRecord 對象的一個或多個屬性 指定一個指定的值yii2tech\ar\softdelete\SoftDeleteBehavior
提供軟刪除和軟恢復 ActiveRecord 的 方法yii2tech\ar\position\PositionBehavior
容許經過提供從新排序方法來 管理整數字段中的記錄順序行爲 VS Traits
概述
使用
Yii::configure()
方法根據配置去初始化其屬性
Yii::configure($object, $config)
配置的格式
class
元素指定了將要建立的對象的徹底限定類名propertyName
元素指定了對象屬性的初始值,鍵名是屬性名,值是該屬性對應的初始值
on eventName
元素指定了附加到對象事件上的句柄,數組的鍵名由 on 前綴加事件名組成as behaviorName
元素指定了附加到對象的行爲,值表示建立行爲的配置信息應用的配置
小部件的配置
yii\base\Widget::widget()
和yii\base\Widget::begin()
方法均可以用來建立小部件默認配置
Yii::createObject()
方法基於依賴注入容器實現Yii::creatObject()
建立對象時,能夠附加一系列默認配置到指定類的任何實例Yii::$container->set()
來定義Yii::setAlias()
來給文件路徑或 URL 定義別名Yii::getAlias()
命令來解析根別名到對應的文件路徑或 URLYii::$classMap
方法向映射表中添加類yii\di\ServiceLocator
或其子類的一個實例yii\di\ServiceLocator::set()
方法進行相關組件註冊。public void set ( $id, $definition )
$definition
能夠是類名,配置數組,php 可調用對象,或者自己就是一個對象實例yii\di\ServiceLocator::has()
檢查某組件 ID 是否被註冊yii\di\ServiceLocator::get()
Yii 經過 yii\di\Container
類提供 DI 容器特性
yii\di\Container::get()
方法將其第三個參數做爲配置數組應用於正在建立的對象 若是該類實現yii\base\Configurable
接口(例如 yii\base\BaseObject),則配置數組將做爲最後一個參數傳遞給類構造函數
yii\di\Container::set()
註冊依賴關係set()
註冊的依賴關係,在每次使用時都會產生一個新實例yii\di\Container::setSingleton()
註冊一個單例的依賴關係set()
或 setSingleton()
註冊的,也能夠是一個類構造器參數列表和一個configuration
用於配置新建立的對象Yii.php
文件時,Yii
就建立了一個 DI 容器Yii::$container
訪問Yii::createObject()
時,此方法實際上會調用這個容器的 get () 方法建立新對象setDefinitions()
或 setSingletons()
方法key
:類名稱,接口名稱或別名value
:與 class 關聯的定義,class關聯的定義,‘identifies
參數值將傳遞給 set () 方法Instance::of('tempFileStorage')
符號,Container
將隱含地提供一個用tempFileStorage
名稱註冊的依賴項
更多學習內容能夠訪問【對標大廠】精品PHP架構師教程目錄大全,只要你能看完保證薪資上升一個臺階(持續更新)
還有更多進階學習資料領取噢進階PHP月薪30k>>>架構師成長路線【視頻、面試文檔免費獲取】