104corp / support
104corp 支持包。
Requires
- php: ^7.4 | ^8.0
- psr/container: ^1 | ^2
- psr/log: ^1 | ^2 | ^3
Requires (Dev)
- guzzlehttp/guzzle: ^6.3 | ^7
- phpunit/phpunit: ^9
- squizlabs/php_codesniffer: ^3.7
This package is not auto-updated.
Last update: 2024-02-23 04:24:03 UTC
README
104corp 支持包。
系统需求
- PHP >= 5.5
安装
使用Composer进行安装
$ composer require 104corp/support
说明
这里是常用的工具实现成 Trait,可以直接使用,这样可以避免复制粘贴所引起的问题。
ContainerAwareTrait
ContainerAwareTrait 实现了 PSR-11 对象的设置。
GuzzleClientAwareTrait
GuzzleClientAwareTrait 实现了如何设置Guzzle客户端的方法。
它的实现方法是:当调用getHttpClient()
时,如果$httpClient已经被setHttpClient()
设置,则返回现有的$httpClient;否则,就创建一个新的。
这种做法可以在测试和实际使用之间取得更好的平衡。平常使用通常不需要太在意如何初始化Guzzle,但在测试需要使用mock的时候,这样设计将能方便地替换真实对象。
HttpClientAwareTrait
HttpClientAwareTrait 也是设置Guzzle客户端的方法。不同的是,它只依赖于接口而不是实现,这样在需要替换Guzzle时,有一个接口可以实施,而整个程序不需要大改。
LoggerTrait
LoggerTrait 继承了Psr\Log\LoggerAwareTrait
,同时实现 log 方法来使用它提供的 logger 成员。另外 log 方法也做了 logger 是否为 null 判定。
使用它的 class 可以直接在任何角落使用 log 方法来操作 logger,而且不需要在意 logger 物件是否存在。而要不要记 log 会有使用这个 class 的角色决定是否要 setLogger()
。因此可以在测试初始化的时候忽略,而在上线的时候传入需要的 Logger。
以下是简单的例子:
use Corp104\Support\LoggerTrait; use Psr\Log\LogLevel; class MyClass { use LoggerTrait; public function doSomething() { $this->log(LogLevel::INFO, 'I do something'); } } // -------------------------------------- $foo = new MyClass(); $foo->doSomething(); // 這裡不會記 log $logger = new \Monolog\Logger('name'); $foo->setLogger($logger); $foo->doSomething(); // 這裡會記 log
另外,setLogger()
是认 interface 的,代表包括自己写的 logger 之外,还能传入第三方所写的 logger,如Monolog。
贡献
开发相关资讯可以参考CONTRIBUTING,有任何问题或建议,欢迎发 issue;如果觉得代码可以修更好的话,也欢迎发 PR 修正。
PR 如何使用可以参考Git 官方文件。