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

时间:2015-10-16 22:36:56

标签: php

使用以下代码,如何将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 个答案:

答案 0 :(得分:0)

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

  1. 将类属性声明为$ logger

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

  3. 将“on_stats”方法重写为类方法,比如logEvent(TransferStats $stats)使用$ this-> logger,这样就可以避免使用“use”关键字

    < / LI>
  4. 将客户端事件“on_stats”作为标准PHP可调用数组传递:

    ['on_stats'=&gt; [$ this,'logEvent']]