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 相关文章推荐
php简单静态页生成过程
Mar 27 PHP
php5中类的学习
Mar 28 PHP
php xfocus防注入资料
Apr 27 PHP
PHP远程连接MYSQL数据库非常慢的解决方法
Jul 05 PHP
php htmlspecialchars加强版
Feb 16 PHP
PHP检测移动设备类mobile detection使用实例
Apr 14 PHP
Laravel 4 初级教程之Pages、表单验证
Oct 30 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
Laravel5框架添加自定义辅助函数的方法
Aug 01 PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
Mar 21 PHP
PHP封装cURL工具类与应用示例
Jul 01 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
Nov 10 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
初识Laravel
2014/10/30 PHP
PHP合并静态文件详解
2014/11/14 PHP
Thinkphp+smarty+uploadify实现无刷新上传
2015/07/30 PHP
简单实现PHP留言板功能
2016/12/21 PHP
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
浅析node.js中close事件
2014/11/26 Javascript
js验证真实姓名与身份证号是否匹配
2015/10/13 Javascript
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
2015/11/06 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Python的time模块中的常用方法整理
2015/06/18 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
python实现证件照换底功能
2019/08/20 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
回门宴答谢词
2014/01/13 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
学校运动会广播稿
2014/10/11 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
奖学金感谢信
2015/01/21 职场文书