2015-01-15 3 views
0

PHP - повторное использование кода в классеPHP Многократное кода функции в пределах класса

У меня есть PHP класс для работы с REST API. У меня есть несколько способов вернуть основную информацию из API, но большая часть данных поступает из одного вызова API.

Например, давайте предположим, что мы имеем в виду к API, чтобы получить модели автомобилей:

CAR API

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

Этот запрос (не настоящий вебсервис кстати) возвращал ВСЕ автомобили.

Предположим, я хочу перечислить ВСЕ автомобили с двигателями V6. Предположим, что это iS 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]; 
} 
} 

Как эффективно тиражировать свой код, так что я могу предложить дополнительные методы, минимизируя строк кода?

ответ

3

Для начала, вы можете переместить локоны определенной функциональности в свою собственную функцию, которая может быть повторно использовать, что-то вроде этого:

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]; 
} 

FYI - я не обращая внимания на то, что переменная $url не определена нигде в вашем примере и что вы не передаете какие-либо данные вместе с запросом cURL. Вам нужно будет добавить переменную $data в функцию curlRequest(), чтобы иметь возможность передавать данные, если вам нужно, и получить $url откуда-то (свойство класса?)

Смежные вопросы