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];
}
}
如何有效地复制我的代码,以便在最小化代码行的同时提供其他方法?
答案 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
(类属性?)