在一个共享函数中重复Laravel / PHP类中的函数


Repeat function in Laravel / PHP Class in one shared function

使用以下代码,我如何将on_stats函数放在一个区域中?所以它可以在这个页面上的所有函数中共享和调用,而不是一遍又一遍地复制和粘贴相同的代码。还有,我如何只声明$logger一次,而不是一遍又一遍地声明。

class API extends Controller
{
    public function __construct() {
    }
    public function api_call1() {
     $client = new GuzzleHttp'Client(['defaults' => ['verify' => false]]);
             $logger = new Logger('View Logs');
 $logger->pushHandler(new StreamHandler(storage_path() . '/logs/api_log.log', Logger::INFO));

     $res = $client->get($this->url . "/my/url/", [
             'on_stats'  => function (TransferStats $stats) use ($logger) {
                $logger->info('Request' . $stats->getRequest()->getMethod() . 
                               'Response' . $stats->getResponse()->getStatusCode() .
                               'Tx Time' . $stats->getTransferTime()
                );
            }
        ]);
        $response = Response::make($res->getBody(), 200);
        $response->header('Content-Type', 'application/json');
        return $response;
        }
            public function api_call2() {
     $client = new GuzzleHttp'Client(['defaults' => ['verify' => false]]);
                         $logger = new Logger('View Logs');
 $logger->pushHandler(new StreamHandler(storage_path() . '/logs/api_log.log', Logger::INFO));

     $res = $client->get($this->url . "/my/url2/", [
             'on_stats'  => function (TransferStats $stats) use ($logger) {
                $logger->info('Request' . $stats->getRequest()->getMethod() . 
                               'Response' . $stats->getResponse()->getStatusCode() .
                               'Tx Time' . $stats->getTransferTime()
                );
            }
        ]);
        $response = Response::make($res->getBody(), 200);
        $response->header('Content-Type', 'application/json');
        return $response;
        }
    }

从我的观点来看,这将是一个好主意:

  1. 声明一个类属性为$logger

  2. 将记录器初始化移动到构造函数

  3. 将"on_stats"方法重写为一个类方法,使用$this->logger写入logEvent(TransferStats $stats),这样你就可以避免使用"use"关键字

  4. 传递客户端事件" on_stats "作为一个标准的PHP可调用数组:

    ['on_stats' => [$this, 'logEvent']]