Thinkphp 框架扩展之类库扩展操作详解


Posted in PHP onApril 23, 2020

本文实例讲述了Thinkphp 框架扩展之类库扩展操作。分享给大家供大家参考,具体如下:

类库扩展

ThinkPHP的类库主要包括公共类库和应用类库,都是基于命名空间进行定义和扩展的。只要按照规范定义,都可以实现自动加载。

公共类库

公共类库通常是指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();

应用类库

应用类库通常是在应用或者模块目录下面的类库,应用类库的命名空间一般就是模块的名称为根命名空间,例如: 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{
}

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

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP4在Windows2000下的安装
Oct 09 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
Oct 29 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
PHP static局部静态变量和全局静态变量总结
Mar 02 PHP
php生成html文件方法总结
Dec 01 PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 PHP
使用php自动备份数据库表的实现方法
Jul 28 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
php表单处理操作
Nov 16 PHP
PHP随机数函数rand()与mt_rand()的讲解
Mar 25 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 #PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
Apr 22 #PHP
PHP 实现 JSON 数据的编码和解码操作详解
Apr 22 #PHP
PHP 实现 WebSocket 协议原理与应用详解
Apr 22 #PHP
php模拟实现斗地主发牌
Apr 22 #PHP
PHP实现随机发扑克牌
Apr 22 #PHP
PHP使用PDO 连接与连接管理操作实例分析
Apr 21 #PHP
You might like
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
PHP基础知识介绍
2013/09/17 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
javascript Select标记中options操作方法集合
2008/10/22 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
2011/03/17 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
JQuery each打印JS对象的方法
2013/11/13 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
2019/06/28 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
西部世纪面试题
2014/12/05 面试题
施工员岗位职责
2014/03/16 职场文书
班主任经验交流会主持词
2014/04/01 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
行政专员岗位职责范本
2014/08/26 职场文书
党支部创先争优承诺书
2014/08/30 职场文书