これは機能します:
if (strpos($page, 'http') == 0) {
$link = 'Test';
}
しかし、これはしません:
if (strpos($page, 'http' || 'www' || '/') == 0) {
$link = 'Test';
}
$page が http、www、または / のいずれでも始まらない場合は、何かを返す必要があります。
これは機能します:
if (strpos($page, 'http') == 0) {
$link = 'Test';
}
しかし、これはしません:
if (strpos($page, 'http' || 'www' || '/') == 0) {
$link = 'Test';
}
$page が http、www、または / のいずれでも始まらない場合は、何かを返す必要があります。
上記の「悪い議論」の回答以外に、重大な論理バグもあります。strpos
'needle' 文字列が '干し草の山' に見つからない場合、ブール値の FALSE を返すことができます。例えば
$needle = 'foo';
$haystack = 'bar';
if (strpos($haystack, $needle) == 0) {
echo 'found it!';
}
strposfound it!
は boolean FALSE を返し、それを PHP が int に型キャストして 0 と比較したため、 に(int)FALSE
なり0
ます。
厳密な比較演算子===
を使用して、実際に int と int を比較していることを確認する必要があります。
if (strpos(...) === 0) { ... }
残念ながら、PHP は「ドアが赤か緑か青か」を理解していません。「ドアが赤、ドアが緑、またはドアが青の場合」にスプーンで餌を与える必要があります。しかし、あなたがとることができるいくつかのショートカットがまだあります:
if( preg_match("(^(?:http|www|/))",$page)) $link = "Test";
パターン マッチングを行う必要がある場合は、このような場合に正規表現を使用することをお勧めします。要点をつかむと、あらゆる面でより効率的になり、より簡単になります。これは非常に役立つガイドです: http://oreilly.com/catalog/regex/chapter/ch04.html