thinkphp5 函数扩展 与 类库扩展 及 驱动扩展

函数扩展

存放位置

位于application下的common.php,这个文件是用于存放我们自定义函数的
存放在里面的函数,全局都可使用

创建一个新函数

function my_fun()
{
	return "个人自定义函数";
}
在任意控制器中都可使用
例如:我们在名称为ap的控制器中使用
public function ap()
	{
		echo my_fun();
访问http://127.0.0.1/public/index.php/api/index/ap/
输出为
个人自定义函数

自定义类库使用


extend扩展目录通常放一些全局并且和应用无关的公共类库,如果是应用相关的类库我们一般放在应用目录中,应用目录放置看后面的例子。

自定义类库或第三方类库,都要放在根目录extend
放置在里面的目录可以随便新建,只要进行相关声明即可。

小小实例

我们当前在里面新建一个kc目录,添加一个BpJi.php
BpJi.php内容
我们要在文件头部声明namespace kc;
<?php
namespace kc;

class BpJi 
{
	
	protected $elements = [];
	
	#将传入的数组载入
	public function __construct($elements = [])
	{
		if(!empty($elements))
			{
				$this->elements = $elements;
			}
	}
	
	#将传入的参数合并在数组尾部
	public function add($elements)
	{
		return(array_push($this->elements,$elements)) ?true:false;
	}
	
}

在控制器中使用

顶部要同要声明该类,与类库文件中不同,这儿的声明要带类名
use kc\BpJi;
方法中的代码,newBpJi来,然后使用即可
public function bi()
	{		
		$list = ['tp3','tp5'];
		$arrayList = new BpJi($list);
		$arrayList->add('Dede');
		dump(collection($arrayList)->toArray());
		
	}
注:上面的collection($arrayList)->toArray(),正常下应该是$arrayList->toArray()就可以,但我的直接使用导致toArray不起作用。

输出如下
array(1) {
  ["*elements"] => array(3) {
    [0] => string(3) "tp3"
    [1] => string(3) "tp5"
    [2] => string(4) "Dede"
  }
}

直接使用$arrayList->toArray()出错

错误如下
致命错误: Call to undefined method kc\BpJi::toArray()

所以按群中大神说的,用了collection$arrayList括起来,便可以使用toArray

应用类库

应用类库放在application-common目录中,common里面的类库可以新建为任何目录名称

应用类库的声明上与全局类库有所不同,所以使用时要注意,其它一样。

类库中新建

我们在类库中新建一个util目录,里面是ArrayList.php类库文件
可以看到namespace app\common\util;这句用了app路径性的声明
<?php
namespace app\common\util;


class ArrayList
{
	public function sc()
	{
		return "这是一个类库哟";
	}	
}

在控制器中使用

使用时也同样use app\common\util\ArrayList;用了这种全路径声明
public function bi()
	{	
		$arLi = new ArrayList();
		echo $arLi->sc();
}

驱动扩展

先放上一张驱动扩展图
thinkphp5 函数扩展 与 类库扩展 及 驱动扩展

上图中的cache/db/...等目录都是放在driver中的即可,这算是驱动扩展规范
日志扩殿例子
找到application-config.php文件中的log,内容是
'log'                    => [
        // 日志记录方式,内置 file socket 支持扩展
        'type'  => 'File',
        // 日志保存目录
        'path'  => LOG_PATH,
        // 日志记录级别
        'level' => [],
    ],
这是系统默认的log处理,我们需要将以上的注释起来,用我们自己的
'log'                    => [
	    'type'  => 'driver\log\Mobile',
	    'yw_mobile'  => '85236214',
	    'phper_moblie' => '85236216',
	],

log扩展文件

根目录-extend-driver-log中建一个Mobile.php文件
文件中同样进行了声明namespace driver\log;
<?php
namespace driver\log;

class Mobile
{
	#如果config中没设置,便使用此处的设置
	protected $config = [
		'yw_mobile' => '13111111111',
		'phper_moblie' => '13511111111',
	];
	
	#实例化并传入参数
	public function __construct($config = [])
	{
		if(is_array($config)){
			$this->config = array_merge($this->config,$config);
		}		
	}
	
	#日志信息
	public function save(array $log = [])
	{
		#假设这是给负责成员发短信的接口
		echo "给程序员{$this->config['yw_mobile']}和运维{$this->config['phper_moblie']}的信息";
	}
}
控制器中测试
public function jk()
	{
		try{
			#错误返回代码
			100 / 0;
		} catch(\think\Exception $ex){
			Log::error('测试错误');
		}
	}
输出
给程序员85236214和运维85236216的信息

 

修改config.php中Log配置
 

'log'                    => [
	    'type'  => 'driver\log\Mobile',
	],
我们将默认的去掉后,再输出
给程序员13111111111和运维13511111111的信息

评论

大侠名号:   验证暗号: 点击我更换图片

修远兮

在这里记录每一点自己需要的知识

添加创始人微信,一起交流心得

推荐文章RECOMMEND