PHP重用类中的函数代码

时间:2015-01-15 21:50:46

标签: php object

PHP - 在类中重用代码

我有一个用于处理REST API的PHP类。我有一些方法可以从API返回基本信息 - 但大多数数据来自单个API调用。

例如,我们假设我们指的是用于获取汽车模型的API:

CAR API

http://cars.com/webservice/getCars.jsp?ALL

此请求(不是真正的网络服务顺便提一下)会返回所有车辆。

让我们说我想列出所有配备V6发动机的汽车。让我们说这是 NOT API的一个功能。

合乎逻辑的做法是检索所有汽车,根据标准进行过滤,然后返回我们正在寻找的东西。

现在......让我们想要一个关于汽车的不同细节的BUNCH - 车轮,刹车,火花塞等。重复相同的代码来检索初始列表是没有意义的汽车。

class Cars {
public function getCars() {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output; 
}

public function getCarEngines($type) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    //Get Engines from list of cars
    return $output['engines'][$type];
}   
}   

如何有效地复制我的代码,以便在最小化代码行的同时提供其他方法?

1 个答案:

答案 0 :(得分:3)

首先,您可以将cURL特定功能移动到可以重复使用的自己的功能中,如下所示:

class Cars {
    public function getCars() {
        $output = $this->curlRequest($url);
        return $output; 
    }

    public function getCarEngines($type) {
        $output = $this->curlRequest($url);
        //Get Engines from list of cars
        return $output['engines'][$type];
    }   

    /**
     * Return the result of a cURL request.
     * @param  string $url
     * @return mixed
     */
    protected function curlRequest($url) 
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);

        return $output;
    }
}   

根据您的数据结构,您可以更进一步说,当您getCarEngines()时,您首先要getCars(),然后过滤输出(如果适用),然后您可以做这样的事情:

public function getCars() {
    return $this->curlRequest($url); 
}

public function getCarEngines($type) {
    $output = $this->getCars();
    // Get Engines from list of cars
    return $output['engines'][$type];
}   

仅供参考 - 我忽略了这样一个事实:$url变量未在您的示例中的任何位置定义,并且您没有随cURL请求一起传递任何数据。您需要在$data函数中添加curlRequest()变量,以便能够在需要时传递数据,并从某处获取$url(类属性?)