我正在努力不断提高我的编程技能,到目前为止我在网上学到了很多东西。但我找不到避免重复代码的方法。这是我的代码:
public function Curl($page, $check_top = 0, $pages = 1, $pagesources = array()){
//$page is the URL
//$check_top 0 = false 1 = true. When true it needs to check both false & true
//$pages is the amount of pages it needs to check.
$agent = "Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0";
try{
for($i = 0; $i < $pages; $i++){
$count = $i * 25; //Page 1 starts at 0, page 2 at 25 etc..
$ch = curl_init($page . "/?count=" . $count);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$pagesource = curl_exec($ch);
$pagesources[] = $pagesource;
}
if($check_top == 1){
for($i = 0; $i < $pages; $i++){
$count = $i * 25;
$ch = curl_init($page . "/top/?sort=top&t=all&count=" . $count);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$pagesource = curl_exec($ch);
$pagesources[] = $pagesource;
}
}
} catch (Exception $e){
echo $e->getMessage();
}
return $pagesources;
}
我正在尝试做什么: 我想从特定页面范围(例如1到5页)获取HTML页面源。有顶页和标准页面我想从页面范围获取两者的来源。所以我的代码工作得很好,但很明显;必须有更好的方法。
答案 0 :(得分:1)
这是一个简短的例子,如何通过编写函数避免重复代码并将它们一起使用。
class A
{
public function methodA($paramA, $paramB, $paramC)
{
if ($paramA == 'A') {
$result = $this->methodB($paramB);
} else {
$result = $this->methodB($paramC);
}
return $result;
}
public function methodB($paramA)
{
// do something with the given param and return the result
}
}
$classA = new Class();
$result = $classA->methodA('foo', 'bar', 'baz');
上面给出的代码显示了一个带有两个方法的简单类。当您在示例中将您的函数Curl
声明为公开时,我猜您正在使用类。上例中的类非常基本。它在类的methodB
方法中使用不同的参数调用方法nethodA
。
这对你意味着什么?你必须找出你的帮助函数需要哪些参数。如果您发现它需要哪些参数,只需编写另一个类方法,该方法使用给定的参数执行curl函数。简单如馅饼。
如果您刚接触使用php的类和方法,我建议您阅读文档,其中描述了类,方法和成员的基本功能:http://php.net/manual/en/classobj.examples.php。