今天用thinkphp写程序,发现import失效了,换成require使用绝对路径引入类库,发现没有问题,到处查看配置,路径问题,无解,疑惑万分,然后去看common/commom.php 中import源码,加上个var_dump($classfile)输出,看看到底路径对没对。
if (substr($baseUrl, -1) != '/') $baseUrl .= '/'; $classfile = $baseUrl . $class . $ext; var_dump($classfile); if (!class_exists(basename($class),false)) { // 如果类不存在 则导入类库文件 return require_cache($classfile); }
却发现没有任何输出结果,恍然大悟,竟然这个common.php也没有被加载,那运行的什么那个,然后看入口文件admin.php
毁三观的发现引入的ThinkPHP框架地址错误,竟然引入成上级目录测试用的Thinkphp 囧。
require '../ThinkPHP/ThinkPHP.php'; 就是多大了一个".",碰巧上机目录确实放了一个ThinkPHP,将错就错用上了,崩溃……
下面附上import的几个用法介绍
1、用法一
import('@.Test.Translate'); @,表示项目根目录。假定根目录是:App/ 导入类库的路径是:App/Lib/Test/Translate.class.php 结论:import('@')是相对于项目目录的Lib目录而言
2、用法二
import('Think.Test.Translate'); Think,表示系统根目录。既是:./ThinkPHP/ 导入类库的路径是:./ThinkPHP/Lib/Test/Translate.class.php 结论:import('Think')是相对于系统目录的Lib目录而言
3、用法三
import('ORG.Test.Translate'); 或 import('COM.Test.Translate'); ORG, 第三方公共类库目录 COM, 企业公共类库目录 两种写法都是相对于./ThinkPHP/Extend/Library/ 而言。 导入类库的路径是:./ThinkPHP/Extend/Library/ORG/Test/Translate.class.php 或 导入类库的路径是:./ThinkPHP/Extend/Library/COM/Test/Translate.class.php 结论:import('ORG')或import('COM')是相对于系统扩展类库目录而言(./ThinkPHP/Extend/Library/)
4、用法四
import('Blog.Test.Translate'); 这种写法既不是@,Think的写法,有不是ORG,COM的写法,会被当作分组的项目目录来处理。 解析结果是:App/../Blog/Lib/Test/Translate.class.php 结论:第四种写法,是相对于分组项目目录的Lib目录而言的写法。
5、用法五
import还支持别名导入,使用别名导入,首先先定义别名文件,在项目配置目录下建立alias.php,定义项目中需要用到的类库别名。
return array( 'page' => LIB_PATH.'Common/page.class.php', ); //这样使用即可 import('page');