类库

可以方便的在 ginkgo 中扩展类库。


添加应用类库

此方法一般用于自行编写的类库,如果使用第三方类库,推荐使用 Composer 来扩展内核类库。

如果需要给应用添加类库,可以放入应用的 classes 目录,例如:

  1. namespace app\classes\first\second;
  2. class Foo {
  3. }

那么实际的类文件位置应该是:

app/classes/first/second/foo.class.php

使用 app\classes\first\second\Foo 类的时候,直接实例化即可使用,例如:

  1. // 使用 Loader 类实例化(单例)
  2. $foo = Loader::classes('Foo', 'second', 'first');
  3. // 实例化类
  4. $foo = new app\classes\first\second\Foo();

分层类库

ginkgo 支持类库的分层,其分层方式与 分层控制器 类似。

在控制器中实例化类库时,系统会默认实例化当前模块层的类库。例如 index 模块下的 User 控制器中实例化某个类库:

  1. namespace app\ctrl\index;
  2. use ginkgo\Loader;
  3. class User {
  4. function __construct() { //构造函数
  5. $this->obj_user = Loader::classes('User');
  6. }
  7. }

类库的实际位置

app\classes\index\user.class.php

定义如下

  1. namespace app\classes\index;
  2. class User {
  3. }

还可以定义分层类库。

例如,定义 index 模块 event 层下的 Blog 类库如下:

  1. namespace app\classes\index\event;
  2. class Blog {
  3. }

类库的实际位置是

app/classes/index/event/blog.class.php

定义完成后,就可以用下面的方式实例化类库了:

  1. use ginkgo\Loader
  2. $event = Loader::classes('Blog', 'event');

跨模块调用

类库支持跨模块调用,例如:

  1. use ginkgo\Loader
  2. $event = Loader::classes('Blog', '', 'admin');

类库的实际位置是

app/classes/admin/blog.class.php

表示实例化 admin 模块的 Blog 类库类

  1. use ginkgo\Loader
  2. $event = Loader::classes('Blog', 'event', 'admin');

类库的实际位置是

app/classes/admin/event/blog.class.php


扩展内核类库

强烈建议使用 Composer 安装和更新扩展类库。

如需要扩展和使用第三方类库,且该类库不是通过 Composer 安装,可以放入根目录下的 extend 目录,该目录是推荐的第三方扩展类库目录。

类的命名和命名空间请遵循 概况 -> 开发规范 章节的建议,例如:

  1. namespace extend\first\second;
  2. class Foo {
  3. }

那么实际的类文件位置应该是:

extend/first/second/foo.class.php

使用 extend\first\second\Foo 类的时候,直接实例化即可使用,例如:

  1. $foo = new extend\first\second\Foo();

或者

  1. use extend\first\second\Foo;
  2. $foo = new Foo();

你可以在入口文件中随意修改 extend 目录的名称,例如:

  1. // 定义配置目录
  2. define('GK_PATH_EXTEND', __DIR__ . '/../extension/'); //应用目录

如果只想改变 extend 目录的名称,也可以添加 GK_NAME_EXTEND 常量定义,例如:

  1. // 定义配置目录
  2. define('GK_NAME_EXTEND', 'extension');