技术求助:如何避免代码重复(复制粘贴代码),提升编程效率
解决代码重复:封装Curl请求逻辑的实用技巧
嘿,自学编程碰到代码重复的问题太正常了——谁刚开始写代码没复制粘贴过重复逻辑呢!咱们针对你的Curl函数来一步步优化,彻底摆脱复制粘贴的麻烦。
核心思路:把重复的Curl请求逻辑抽成独立函数
从你给出的代码片段来看,你应该是在循环里多次执行Curl请求,每次请求的初始化、设置、执行、关闭步骤基本一致,这就是重复代码的根源。咱们把这部分通用逻辑单独封装成一个小函数,之后只需要调用它就行。
第一步:封装单次Curl请求的通用函数
// 把单次Curl请求的逻辑单独拎出来,作为私有方法复用 private function sendCurlRequest($targetUrl, $userAgent) { // 初始化Curl句柄 $curlHandle = curl_init(); // 设置通用的Curl选项(可根据需求添加更多,比如超时、SSL验证等) curl_setopt($curlHandle, CURLOPT_URL, $targetUrl); curl_setopt($curlHandle, CURLOPT_USERAGENT, $userAgent); curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true); curl_setopt($curlHandle, CURLOPT_FOLLOWLOCATION, true); // 自动跳转 // 执行请求并获取响应 $response = curl_exec($curlHandle); // 检查请求是否出错 if(curl_errno($curlHandle)) { throw new Exception("Curl请求失败: " . curl_error($curlHandle)); } // 关闭Curl句柄 curl_close($curlHandle); return $response; }
第二步:修改原Curl函数,复用封装好的请求逻辑
现在你的主函数里就不用重复写Curl的初始化、设置代码了,直接调用上面的函数即可:
public function Curl($page, $check_top = 0, $pages = 1, $pagesources = array()){ //$page 为目标URL //$check_top 0 = 假,1 = 真;为真时需同时检查真假两种情况 //$pages 为需要检查的页面数量 $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++){ // 生成当前页的请求URL(根据你的分页规则调整,这里假设是page参数) $currentRequestUrl = $page . ($pages > 1 ? "?page=" . ($i + 1) : ""); // 调用封装好的函数,获取页面源码 $pageSource = $this->sendCurlRequest($currentRequestUrl, $agent); // 处理check_top的逻辑,同样复用请求函数 if($check_top === 1){ // 假设需要请求带check_top参数的URL,直接调用封装函数 $topCheckUrl = $currentRequestUrl . "&check_top=1"; $topPageSource = $this->sendCurlRequest($topCheckUrl, $agent); $pagesources[] = [$pageSource, $topPageSource]; } else { $pagesources[] = $pageSource; } } return $pagesources; } catch(Exception $e){ // 异常处理,比如记录日志或者返回错误信息 error_log("Curl操作出错: " . $e->getMessage()); return $pagesources; } }
额外的代码优化小建议
- 把通用配置抽成常量/属性:比如User-Agent、Curl超时时间这些固定值,可以定义成类的常量,不用每次在函数里写死:
const DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0"; const CURL_TIMEOUT = 10; - 复用响应处理逻辑:如果之后需要对返回的页面源码做解析(比如提取内容),也可以把解析逻辑封装成独立函数,避免重复写解析代码。
- 使用类型声明:给函数参数和返回值加上类型声明,让代码更清晰,也能提前发现错误。
自学编程的过程中,学会抽离重复逻辑是迈向“写出干净代码”的重要一步,多练几次就会越来越顺手啦!
内容的提问来源于stack exchange,提问作者Samo_
相关产品推荐
相关产品推荐

