thinkphp6 关于服务的实现

本文详细介绍了如何在PHP项目中自定义服务类及系统服务。通过定义被服务的对象类,实现静态变量的设置与显示,接着创建服务提供者进行服务注册与执行。最后,配置系统服务并在控制器中调用,实现服务的全局使用。

自定义系统类
1、定义被服务的对象类

<?php
namespace app\common;

/**
 * 自定义服务类
 */
class MyServiceDemo
{
	//定义一个静态成员变量
	protected static $myStaticVar = '123';
	//设置该变量的值
	public static function setVar($value)
	{
		self::$myStaticVar = $value;
	}
	//用于显示该变量
	public function showVar()
	{
		var_dump(self::$myStaticVar);
	}

}

2、定义服务提供者
在项目根目录,命令行执行php think make:service MyService ,将会生成一个app\service\MyService.php文件,在其中写入代码。

<?php
declare (strict_types = 1);

namespace app\service;
use think\Service;
use app\common\MyServiceDemo;

class MyService  extends \think\Service
{

    /**
     * 注册服务
     *
     * @return mixed
     */
    public function register()
    {
    	//将绑定标识到对应的类
    	$this->app->bind('my_service',MyServiceDemo::class);
    }

    
    /**
     * 执行服务
     *
     * @return mixed
     */
    public function boot()
    {
        //将被服务类的一个静态变量设置成另外一个值
        MyServiceDemo::setVar('abc');
    }
}

3、配置系统服务
在app\service.php文件如果没有就创建,写入

<?php

use app\AppService;

// 系统服务定义文件
// 服务在完成全局初始化之后执行
return [
    AppService::class, //这个可以不用写入
    '\app\service\MyService'
];

4、在控制器调用
创建一个控制器文件,写入代码:

<?php
namespace app\controller;

use app\BaseController;
use app\common\MyServiceDemo;

class About extends BaseController
{
    public function index(MyServiceDemo $demo)
    {
      //在这里测试服务
      //因为在服务提供类app\service\MyService的boot方法中设置了$myStaticVar='abc',所以这里输出‘abc'
      //
     echo  $demo->showVar();

     }

    public function hello($name = 'ThinkPHP6')
    {
        return 'hello,' . $name;
    }
}

//执行原理和分析见代码注释。另外说说自定义的服务配置是怎么加载的:App::initialize()中调用了

1 if (is_file($appPath . 'service.php')) {
2     $services = include $appPath . 'service.php';
3     foreach ($services as $service) {
4         $this->register($service);
5     }
6 }

正是这里将我们定义的服务加载进来并注册。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值