Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
DoYouHaoBaby 虽然提供了PHP __autoload来管理类。但是,你还是可以使用下面的方法来管理类。原因如下, __autoload难免有要求严格的命名格式,也许第三方包不是这种格式,那么数据就无法通过__autoload导入,你可以使用下面的方式来导入数据。
DoYouHaoBaby统一采用G::import方法进行包中类文件的加载。G::import方法是DoYouHaoBaby内建的包和文件导入方法,提供了方便和灵活的文件导入机制,完全可以替代PHP的 require和include方法。例如:
- G::import("Dyhb.Util.Test");
- G::import("@.Action.TestAction");
等同于:
- require( 'D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\LibPHP\Extend\Dyhb\Util\Test.class.php' );
- require( 'D:\phpcondition\htdocs\doyouhaobaby\TestApp\Lib\Action\TestAction.class.php' );
G::import方法具有缓存和检测机制,相同的文件不会重复导入,如果发现导入了不同的位置下面的同名包文件,系统会提示冲突,例如:
- G::import("Dyhb.Util.Array");
- G::import("Org.Util.Array");
上面的情况导入会产生引入两个同名的Array.class.php 类,即使实际上的类名可能不存在冲突,但是按照DoYouHaoBaby的规范,类名和文件名是一致的,所以系统会抛出类名冲突的异常,并终止执行。
注意:在Unix或者Linux主机下面是区别大小写的,所以在使用G::import方法的时候要注意目录名和类库名称的大小写,否则会引入文件失败。
对于G::import方法,系统会自动识别导入包文件的位置,DoYouHaoBaby的约定是Dyhb、Org、Com包的导入以系统扩展包为相对起始目录,否则就认为是项目应用包为起始目录。
- G::import("Dyhb.Util.Session");
- G::import("Org.Util.Page");
上面两个方法分别导入了系统扩展包目录下的D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\LibPHP\Extend\Dyhb\Util\Session.class.php和D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\LibPHP\Extend\Dyhb\Util\Page.class.php类文件。
要导入项目的应用包文件也很简单,使用下面的方式就可以了,和导入基础包的方式看起来差不多:
- G::import("TestApp.Action.UserAction");
- G::import("TestApp.Model.UserModel");
上面的方式分别表示导入TestApp项目下面的D:\phpcondition\htdocs\doyouhaobaby\TestApp\Lib\Action\UserController.class.php和D:\phpcondition\htdocs\doyouhaobaby\TestApp\Lib\Action\Model\UserModel.class.php类文件。通常我们都是在当前项目里面导入所需的类文件,所以,我们可以使用下面的方式来简化代码:
- G::import("@.Action.UserAction");
- G::import("@.Model.UserModel");
除了看起来简单一些外,还可以方便项目类库的移植。
如果要在当前项目下面导入其他项目的包,必须保证两个项目的目录是平级的,否则无法使用:
- G::import("OtherApp.Model.GroupModel");
的方式来加载其他项目的包。
我们知道,按照系统的规则,import方法是无法导入具有点号的类库文件的,因为点号会直接转化成斜线,例如我们定义了一个名称为User.Info.class.php 的文件的话,采用:
- G::import("Org.User.Info");
方式加载的话就会出现错误,导致加载的文件不是Org/User.Info.class.php 文件,而是Org/User/Info.class.php 文件,这种情况下,我们可以使用:
- G::import("Org.User|Info");
来导入。
对于G::import方法,系统会自动识别导入类库文件的位置,如果是其它情况的导入,需要指定baseUrl参数,也就是G::import方法的第二个参数。例如,要导入当前文件所在目录下面的
Demo/Test.class.php 文件,可以使用:
- G::import("Demo.Test",dirname(__FILE__));
