URL 또는 HTML에서 문자열로 웹 크롤러를 반환하는 함수를 작성하고 있습니다. 나는 "토글 (toggle)"매개 변수를 제공함으로써 분리되어 동일한 기능을 사용할 수 있다고 생각했습니다. 이것이 나쁜 관행인지는 모르겠지만, 비슷한 문제로 스위치와 if/else를 사고없이 사용했습니다.PHP wrapping 비교 if/else 또는 스위치로 인해 오류가 발생합니다.
내 함수 호출 :
$mainCrawler = $this->_returnCrawler($url, $urlPattern, 'url');
그리고 기능 (전성 검사 포함) : 여기
가 문제가있는 코드 약자로public function _returnCrawler($target='', $urlPattern='', $toggle='')
{
if($toggle === 'url'){echo "indeed it is";} //Works as expected
if($toggle === 'url'){ //things break down the line
if(preg_match($urlPattern, $target)){
$client = new Client();
$client->getClient()->setDefaultOption('config/curl/'.CURLOPT_TIMEOUT, 60);
return $crawler = $client->request('GET', $target);
}else{
return false;
}
}
}
이 다른 함수의 괴물을 만드는 (텍스트를 가져 오기위한 HTML 요소에서 foreach를 사용하는 기능).
오류/출력 :
indeed it is
Fatal error: Call to a member function filter() on a non-object in /www/otherway/application/controllers/Welcome.php on line 267
A PHP Error was encountered
Severity: Error
Message: Call to a member function filter() on a non-object
Filename: controllers/Welcome.php
Line Number: 267
Backtrace:
AND (스위치 내부) 영향을 줄 :
public function _returnCrawler($target='', $urlPattern='', $toggle='')
{
if($toggle === 'url'){echo "indeed it is";}
if(true){ //Difference is here
if(preg_match($urlPattern, $target)){
$client = new Client();
$client->getClient()->setDefaultOption('config/curl/'.CURLOPT_TIMEOUT, 60);
return $crawler = $client->request('GET', $target);
}else{
return false;
}
}
}
:
$crawler->filter($tag)->each(function ($node) use (&$tagContent, &$n, &$tag) {
$tagContent[$tag][$n] = trim($node->text());
$n++;
});
그러나,이 기능은 저 I 원하는 결과를 얻을
나는 또한 스위치/케이스에 포장하려고 시도했는데, 이것은 나쁜 결과를 가져온다.
이 정말 내 머리 아파, 내가 사용 true로 평가하고 온 전성 검사를 인쇄if($toggle === 'url'){...}
는 또한
if(true){...}
에서 어떤 다른 볼 수 없습니다
if(1 > 2){...}
은이 함수의 데이터에 의존하는 함수에서 예상되는 급류를 제공하지 않습니다. 그들이 필요로하는 것을 말하기.
어떻게 될 수 있습니까? 논리 오류, 실명?
다른 기능이 없으면 다른 기능을 사용하여 해결할 수 있지만이 시점에서 나는 여기서 잘못 수행 한 것에 대해 진정으로 궁금합니다.
모든 도움말 또는 의견 (이 예에서는 무엇이든)을 크게 높이 평가합니다. $crawler
실제로 크롤러가 포함되어있는 경우,
foreach ($urls as $url) {
$crawler = $this->_returnCrawler($url, $urlPattern, $crawlerType);
$crawler->filter($tag)->each(/* ... */);
}
당신은 확인하지 않음 :
제기랄. 토글 매개 변수가 누락 된 것은이 함수에 대한 또 다른 호출이었습니다. 나는 내 삶의 선택을 재검토하러 갈거야 – Kyrre