## 对象基类 MixPHP 的核心类大部分都是继承对象基类,组件全部继承对象基类,了解对象基类有助于我们更加了解框架的运行机制与设计方式。 | 类 | | --- | | mix\base\BaseObject | ## 该类的作用 使配置的使用更加“面向对象”,下面对比一下类库封装。 ThinkPHP: ~~~php class Http { public $baseurl public function __construct() { Config::load('config'); $this->url = Config::get('config.baseurl'); $this->init(); } public function init() { // 初始化处理 } } $http = new Http(); ~~~ MixPHP: ~~~php class Http extends BaseObject { public $baseurl // 当属性导入完成后,会自动执行该方法 public function onInitialize() { // 初始化处理 } } $attributes = [ 'baseurl' => '', ]; $http = new Http($attributes); ~~~ 对比上面两种方式,显然使用对象基类的方式更好一些。 ## 更多的好处 对象基类使我们可以通过一个配置数组就可控制类的运行参数,如果把全部类的配置数组集中在一个文件,就可以控制整个框架的运行参数了,MixPHP 就是这样设计的,那个全部类的配置数组就是应用配置文件。 ## 对象的实例化 通过阅读“组件”章节,我们了解到:使用频繁的类需定义为组件,那使用不频繁的类该如何处理呢? MixPHP 提供了统一的实例化方法: 在应用配置内的 `objects` 字段内注册,下面是一个自定义类的注册配置: ~~~php // 对象配置 'objects' => [ 'myObject' => [ // 类路径 'class' => 'apps\index\libraries\Http', // 属性 'baseurl' => 'http://www.baidu.com', ], ], ~~~ - myObject 是类名称,实例化时使用。 - class 需要实例化类的命名空间。 - 其他字段:都会在该类实例化后,导入为对象属性,key为属性名称,value为属性的值。 在框架内任何位置都可使用以下方法实例化,该方法返回的实例不会常驻内存。 ~~~php $myObject = app()->createObject('myObject'); ~~~ `app()->createObject` 的使用场景: - 分页类:使用不频繁,但使用参数需要统一。 - 多数据库连接:当需要临时连接另一个数据库时。 - 多服务器:Console开发时,一个控制器启动一个服务,不同服务需要配置不同的参数,由于服务并不是全局调用的,定义为组件不合适,所以定义为对象。 >[info] 如果类无需配置参数,比如:模型类,请直接使用 new 实例化,无需使用该方法实例化。 ## 基类的事件 - onConstruct:构造事件,相当于 __construct 方法。 - onInitialize:当组件完成构造事件并导入配置信息为属性后触发该事件,用于做一些初始化处理。 - onDestruct:析构事件,相当于 __destruct 方法。 使用时只需重写这几个事件方法即可。 ~~~php // 构造事件 public function onConstruct() { parent::onConstruct(); // ... } // 初始化事件 public function onInitialize() { parent::onInitialize(); // ... } // 析构事件 public function onDestruct() { parent::onDestruct(); // ... } ~~~