WebcrawlerをURLまたはHTMLから文字列として返す関数を作成しています。私は同じ機能を使い、 "トグル"パラメータを提供することで分割できると考えていました。私はこれが悪い習慣であるかどうかはわかりませんが、スイッチとif/elseを似たような事柄で事故なく使用しました。ここでPHPラッピング比較if/elseまたはswitchによってエラーが発生する
は、問題のあるコードです:
私の関数呼び出し:
$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:
と(スイッチ内部の)影響を受ける行:
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++;
});
ただし、この機能は私が望む結果を与えます
私はスイッチ/ケースでそれをラップしようとしましたが、これは同じ悪い結果をもたらします。
は、これは本当に私の脳が痛い、と私は使用して、 trueに評価され、健全性チェックを印刷しif($toggle === 'url'){...}
はまた
if(true){...}
から何が違うのですかを確認することはできません
if(1 > 2){...}
は、この関数のデータに依存する関数から予想されるトレントを得ることはできません彼らが必要とするものを訴える。
この原因は何ですか?論理エラー、失明?
これ以外の場合は、これは別の機能を使用することで解決できますが、ここでは私が間違って行ったことについて本当に興味があります。
これらの例のヘルプやフィードバックは大変ありがとうございます。
Goddamnit。これは、この関数のもう一つの呼び出しで、トグルパラメータが欠落していました。私は私の人生の選択を再考するつもりだ – Kyrre