查看: 154|回复: 0

[tp6] thinkphp6 真实业务场景:接口实战(缓存接口 + 日志接口)

[复制链接]

748

主题

39

回帖

3907

积分

管理员

总舵主

积分
3907
QQ
发表于 2026-5-30 15:53:37 | 显示全部楼层 |阅读模式
企业级最常用、最标准、能直接放进你项目里的代码,让你彻底理解:
一个类实现多个接口在 TP6 里到底怎么用。
一、先定义两个接口(制定规矩):
1. 日志接口(app/library/LogInterface.php):

  1. <?php
  2. namespace app\library;

  3. // 日志接口:规定必须有写日志的方法
  4. interface LogInterface
  5. {
  6.     // 规定:必须实现写日志方法
  7.     public function writeLog(string $content): void;
  8. }
复制代码
2. 缓存接口(app/library/CacheInterface.php):

  1. <?php
  2. namespace app\library;

  3. // 缓存接口:规定必须有设置、获取缓存的方法
  4. interface CacheInterface
  5. {
  6.     public function setCache(string $key, $value, int $expire = 3600): bool;
  7.     public function getCache(string $key);
  8. }
复制代码
二、写一个用户类,同时实现这两个接口:

文件:app/library/UserService.php:

  1. <?php
  2. namespace app\library;

  3. // 重点:一个类 implement 多个接口,用逗号分隔
  4. class UserService implements LogInterface, CacheInterface
  5. {
  6.     // ========================
  7.     // 必须实现:LogInterface 的方法
  8.     // ========================
  9.     public function writeLog(string $content): void
  10.     {
  11.         // 真实写日志逻辑
  12.         file_put_contents('./log.txt', date('Y-m-d H:i:s') . ' ' . $content . PHP_EOL, FILE_APPEND);
  13.     }

  14.     // ========================
  15.     // 必须实现:CacheInterface 的方法
  16.     // ========================
  17.     public function setCache(string $key, $value, int $expire = 3600): bool
  18.     {
  19.         return cache($key, $value, $expire);
  20.     }

  21.     public function getCache(string $key)
  22.     {
  23.         return cache($key);
  24.     }

  25.     // ========================
  26.     // 自己的业务方法
  27.     // ========================
  28.     public function getUserInfo(int $userId)
  29.     {
  30.         // 用缓存
  31.         $key = "user:$userId";
  32.         $user = $this->getCache($key);

  33.         if (!$user) {
  34.             $user = ['id' => $userId, 'name' => '测试用户'];
  35.             $this->setCache($key, $user);
  36.             // 用日志
  37.             $this->writeLog("用户ID:$userId 缓存不存在,已重新设置");
  38.         }

  39.         return $user;
  40.     }
  41. }
复制代码
三、控制器里调用(最真实用法):

文件:app/controller/User.php:

  1. <?php
  2. namespace app\controller;

  3. use app\library\UserService;

  4. class User
  5. {
  6.     public function index()
  7.     {
  8.         $service = new UserService();

  9.         // 调用业务方法
  10.         $user = $service->getUserInfo(100);

  11.         // 直接调用接口方法也可以
  12.         $service->writeLog('用户访问了首页');

  13.         return json($user);
  14.     }
  15. }
复制代码
四、你马上能看懂的关键点:

一个类实现多个接口的写法:

  1. class UserService implements LogInterface, CacheInterface
复制代码
  1. 逗号分隔,想加几个接口就加几个。
  2. 2. 必须实现所有接口里的所有方法
  3. 实现 LogInterface → 必须写 writeLog()
  4. 实现 CacheInterface → 必须写 setCache() + getCache()
  5. 少一个都会直接报错,这就是接口的作用:强制规范。
  6. 3. 接口好处(实战价值)
  7. 统一代码规范
  8. 团队协作不混乱
  9. 方便以后切换驱动(比如换成 Redis 缓存)
复制代码
五、一句话总结这个例子:
UserService 既是一个日志工具,也是一个缓存工具,同时还是用户业务类。
道不同,不相为谋!理想要有,万一实现了呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:2513533699@qq.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|鲁ICP备19000917号|鲁公网安备37078302000320号

在本版发帖
关注公众号
QQ客服返回顶部