前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何加载第三方类库/项目类库/基类库?

如何加载第三方类库/项目类库/基类库?

作者头像
PM吃瓜
发布2019-08-13 10:46:18
1.2K0
发布2019-08-13 10:46:18
举报
文章被收录于专栏:PM吃瓜(公众号)PM吃瓜(公众号)

如果你的类库没有使用命名空间定义的话,实例化的时候需要加上根命名空间,官方文档原话

tp中对于没有命名空间的类, 实例化的时候要使用 new \ClassName();

####第三方类库导入(vendor)

ThinkPHP 的基类库都是以.class.php 为后缀的,这是系统内置的一个约定,当然也可以通过 import 的参数来控制,为了更加方便引入其他框架和系统的类库,系统还提供了一个import方法的别名vendor,专门用于导入第三方类库,并且默认的起始目录和类文件后缀有区别。

第三方类库位于系统扩展目录下的Vendor 目录,例如,我们把 Zend 的 Filter\Dir.php 放到Vendor 目录下面,这个时候 Dir 文件的路径就是Vendor\Zend\Filter\Dir.php,我们使用vendor 方法导入只需要使用:

当我们想在ThinkPHP中引入第三方扩展,而第三方扩展又没有按照ThinkPHP的规范在编写的时候时,就需要将第三方扩展放置到Library/Vendor目录下,当然,这是针对ThinkPHP 3.2而言,低版本则根据情况来看了。

/**

* 生成二维码

* @param string $url url连接

* @param integer $size 尺寸 纯数字

*/

functionqrcode($url,$size=4){

Vendor('Phpqrcode.phpqrcode');

if (strpos($url, 'http')===false) {

$url='http://'.$url;

}

QRcode::png($url,false,QR_ECLEVEL_L,$size,2,false,0xFFFFFF,0x000000);

}

########应用类库 (use)

应用类库通常是在应用或者模块目录下面的类库,应用类库的命名空间一般就是模块的名称为根命名空间,例如: Home\Model\UserModel类(位于Application\Home\Model)

namespace Home\Model;

use Think\Model;

class UserModel extends Model{

}

Common\Util\Pay类(位于Application\Common\Util)

namespace Common\Util;

class Pay {

}

Admin\Api\UserApi类(位于Application\Admin\Api)

namespace Admin\Api;

use Think\Model;

class UserApi extends Model{

}

一个原则,命名空间的路径和实际的文件路径对应的话就可以实现直接实例化的时候自动加载。

公共类库 (import)

公共类库通常是指ThinkPHP/Library目录下面的类库,例如:

Think目录:系统核心类库

Org目录:第三方公共类库

这些目录下面的类库都可以自动加载,你只要把相应的类库放入目录中,然后添加或者修改命名空间定义。你可以在Org/Util/目录下面添加一个Image.class.php文件,然后添加命名空间如下:

namespace Org\Util;

class Image {

}

这样,就可以用下面的方式直接实例化Image类了:

$image = new \Org\Util\Image;

除了这些目录之外,你完全可以在ThinkPHP/Library目录下面添加自己的类库目录,例如,我们添加一个Com目录用于企业类库扩展:

Com\Sina\App类(位于Com/Sina/App.class.php )

namespace Com\Sina;

class App {

}

Com\Sina\Rank类(位于Com/Sina/Rank.class.php)

namespace Com\Sina;

class Rank {

}

公共类库除了在系统的Library目录之外,还可以自定义其他的命名空间,我们只需要注册一个新的命名空间,在应用或者模块配置文件中添加下面的设置参数:

'AUTOLOAD_NAMESPACE' => array(

'Lib' => APP_PATH.'Lib',

)

我们在应用目录下面创建了一个Lib目录用于放置公共的Lib扩展,如果我们要把上面两个类库放到Lib\Sina目录下面,只需要调整为:

Lib\Sina\App类(位于Lib/Sina/App.class.php )

namespace Lib\Sina;

class App {

}

Lib\Sina\Rank类(位于Lib/Sina/Rank.class.php)

namespace Lib\Sina;

class Rank {

}

如果你的类库没有采用命名空间的话,需要使用import方法先加载类库文件,然后再进行实例化,例如:我们定义了一个Counter类(位于Com/Sina/Util/Counter.class.php):

class Counter {

}

在使用的时候,需要按下面方式调用:

import('Com.Sina.Util.Couter');

$object = new \Counter();

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Tech爬虫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档