我需要帮助避免重复代码(复制粘贴代码两次)

时间:2018-04-01 19:52:38

标签: php code-duplication

我正在努力不断提高我的编程技能,到目前为止我在网上学到了很多东西。但我找不到避免重复代码的方法。这是我的代码:

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页面源。有顶页和标准页面我想从页面范围获取两者的来源。所以我的代码工作得很好,但很明显;必须有更好的方法。

1 个答案:

答案 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