On Mon, 25 Mar 2002 22:23:48 +0100, Martin Mouritzen <martin@fez.dk>
wrote:
>Jeg syntes nu personligt, at det er lidt dumt at bruge funktioner der
>ikke er beregnet til formålet. Desuden forvirrer du en nybegynder mere
>ved at henvise ham til det.
Betragt det som et idiom.
>Den rigtige funktion til formålet er IMO strpos
>(<URL:
http://php.net/manual/en/function.strpos.php>)
>
><?
>if (strpos($texten,"mand")) {
> // Findes
>}
Dette er altså bare ikke en meget bedre brug af strpos i
if-sammenhæng, da 0 også vil være false i den forbindelse. Så hvis
strpos returnerer 0 (fx hvis teksten er "mand hvor er jeg sulten"), så
vil det også give false i dit tilfælde. Derfor bør det også tjekkes op
imod typen.
Eksempel:
<?
$texten = "mand hvor er jeg sulten";
// Giver "findes ikke", idet (0 == FALSE)
print (strpos($texten,"mand") != FALSE ? "findes\n" : "findes
ikke\n");
// Giver "findes", idet (0 !== FALSE)
print (strpos($texten,"mand") !== FALSE ? "findes\n" : "findes
ikke\n");
?>
Så det skal hedde:
if (strpos($texten,"mand") !== FALSE) {
..
}
Det samme kan selvfølgelig siges om strstr, hvis man søger efter "0"
og det kun findes som sidste tegn (hvor strstr så vil returnere
string'en "0"). Men hvis du virkelig vil hævde at "det skal gøres
ordentligt", så bør det gøres mere grundigt og præcist end blot "if
(funktion())".
Jeg ser som sagt ikke de store problemer i som udgangspunkt at bruge
strstr. Det er lettere her at se om man selv bruger "0" som needle
(hvilket såvidt jeg kan se vil være det eneste tilfælde, hvor man får
resulteret 0 - et andet tilfælde er måske hvis man søger på "-", og fx
får returneret "-0"). I strpos vil 0 blive returneret langt oftere.
--
- Peter Brodersen