ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
一、服务系统 1\. 服务系统,可以将一个类的对象注册到容器中去,方便调用执行; 2\. 服务的执行优先级较高,在执行主体程序前就已经完成依赖注入; 3\. 它的作用可以做一些初始化,配置一些参数,扩展插件等等均可; 4\. 验证码扩展类就使用了服务系统,我们自己创建一个简单的服务; 5\. 在common目录下创建一个Shut.php类,这个类是被服务的类;// 他说,服务系统有两个要素,一个是注册,一个是执行 ``` <?php namespace app\common; class Shut { // 书写一个静态的变量 方便调用 // 这也是一个可更改的变量 public static $name = 'Mr.Zy'; // 书写一个更改静态变量的方法,同时这里也要为静态的 public static function setName($name) { self::$name = $name; } public function run() { halt(self::$name . "温馨提示,系统已关闭..."); } } ``` 6\. 使用命令行,生成一个对Shut.php服务的服务类ShutService.php; 命令行语句:php think make:service ShutService   // 他说这句话的意思是,在service文件下生成一个ShutService的服务类 7\. 服务类有两个方法,一个是服务注册 register() ,一个是服务启动 boot(); ``` <?php declare (strict_types = 1); namespace app\service; use app\common\Shut; class ShutService extends \think\Service { /** * 注册服务 * * @return mixed */ public function register() { // 绑定一个标识,意思是将被服务的类绑定到容器里 // shut 是标识,Shut::class 是被绑定的被服务类 $this->app->bind('shut',Shut::class); } /** * 执行服务 * * @return mixed */ public function boot() { // Shut::setName('Mrs.ghx'); } } ``` 8\. 最后一步,将系统服务配置到全局定义文件里,service.php; // service.php是自己创建的文件(但是我的好像是自己生成了一个,还是原来就有的,我忘了)注:service.php 文件是之前就有的。 ``` <?php // 系统服务定义文件 // 服务在完成全局初始化之后执行 return [ \app\service\ShutService::class, ]; ``` 9\. 最后在任意控制器测试即可,可以容易依赖注入或容器标识执行系统服务; // 他说,这个服务类可以完成一些初始化呀,配置的操作 ``` <?php namespace app\controller; use app\BaseController; use app\common\Shut; class Index extends BaseController { public function test(Shut $shut) { // 使用那个服务类有三种方法 // 第一种:就是直接在方法中注入依赖,也就是上面的 test(Shut $Shut),然后下面就可以用了. $shut->run(); // 第二种:使用助手函数 // 提示,这里的shut指的是我们在注册服务时写的标识,如果标识为abc,那么这里也要为abc app()->shut->run(); // 第三种:继承基础控制器 BaseController 才能使用 $this->app->shut->run(); } } ``` 首先,弄一个被服务的类,然后生成一个服务类,然后把被服务类绑定到容器里,最后将系统服务配置到全局定义文件里,就可以用了。 验证码也是这么实现的,我觉得,这东西可以弄一些全局配置,安全检测?好了,不写了。就到这里吧。 这个教学,哔哩哔哩上有,现在有点看不懂,以后再来看就明白了。 再加两句话,服务系统,听名字像是为程序服务的东西。