tp5.0与5.1中vendor和extend的区别
1、thinkPHP5.0 vendor
vendor的是通过composer的方法进行自动引入到第三方扩展库vendor目录里的,调用方法是利用的vendor方法:
$re = vendor ( 'PHPExcel' );
$mail = new \PHPExcel ();
2、thinkPHP5.0 extend
extend是通过手动的方法直接把第三方扩展库或者自己写的封装库直接引入到extend目录里,调用方法的实例:
use think\Loader;
Loader::import("PHPExcel",EXTEND_PATH);
$objPHPExcel=new \PHPExcel();
3、在thinkPHP5.1.X新版取消了Loader::import方法以及import和vendor助手函数,推荐全面采用命名空间方式的类以及自动加载机制,如果必须使用请直接改为php内置的include或者require语法。
原来的import("Vendor.Classes.PHPExcel.IOFactory");或Vendor('phpoffice.phpexcel.Classes.PHPExcel.IOFactory');方法已经不再使用
4、在thinkPHP 5.1.X中的处理方法,必须使用composer方式安装第三方模块。否则在vendor目录下的内容无法自动加载。也就是到了这一版必须用Composer,方法加载去掉了,其实这样也好,比较靠拢主流框架,比如laravel,如果用好TP5.1在转向laravel很容易,而且用工具管理包,也符合现在的开发潮流,像node各种工具包管理,在此虽然刚接触很不爽,但是支持吧。
5、主要内容:重点说一下php namespace和use,能够成功在TP5.1中引入第三方包,命名空间太重要了,必须明白到底是咋回事,单单明白namespace还不行,use的用法和规则也缺一不可,我当时就只了解了namespace,什么大空间,子空间,依然不成功,是因为use用的不对。
总结:
在此也就是说在TP5.1中,导入第三方包在vendor文件夹中,先用compose require 加包成功,再先use对,在new,才能成功,在前面不声明use是不能加载第三方包的,还有一路就是进vendor文件夹中找到你加包的文件夹,里面src里面php文件.拷贝到extend文件下新建文件夹中,统一管理也可以,有一个开发者就是这样干,不用use 直接反斜杠\ 新建文件夹\你要的类,但是为了清楚明白还是use比较好。
1.在入口文件中添加
define('EXTEND_PATH', __DIR__ .'/extend/');
其实tp5给了我们一种方式去实现不用命名空间来加载第三方的类!
我们将类文件放到extend目录下,在控制器中要用到类的话可以通过import(),函数手动引入类文件,引入方法官方手册中有说明(架构->自动加载->类库导入)。
// 引入 extend/qrcode.php Loader::import('qrcode', EXTEND_PATH); // 助手函数 import('qrcode', EXTEND_PATH); // 引入 extend/wechat-sdk/wechat.class.php Loader::import('wechat-sdk.wechat', EXTEND_PATH,'.class.php'); // 助手函数 import('wechat-sdk.wechat', EXTEND_PATH,'.class.php');
手动引入了类文件后,进行实例化需要特别注意了!
我们需要在 new 类文件()时,在类文件前面加一个 “ \ ” ,即如下:
$obj = new \Test();
加 ‘\’ 的原因是,tp5的命名空间自动加载规则:自动加载的实现由think\Loader类库完
成,自动加载规范符合PHP的PSR-4,根据对规则的了解,放在extend目录下没有定义
命名空间的类文件,就是全局化的类。实例化全局化的类的话,即用"\"放在类名前表
示此类是全局类,就new一个全局化的类!
评论 (1)