PHP Pro Tip II: Att använda isset() istället för strlen()

Marcus Olsson,

Ett ganska okänt trick, men som är ganska användbart är att man kan använda isset() istället för strlen() för att mäta längden på en sträng – och det är t.o.m. mer effektivt!

Till att börja med så bör man känna till att man kan hantera strängar som array:er i PHP:

1$string = 'Marcus';
2echo($string[0]);
3// "M"
1$string = 'Marcus';
2echo($string[0]);
3// "M"

Hur man skriver i vanliga fall:

1if(5 < strlen($string)) {
2 //If the string is longer than five characters
3}
1if(5 < strlen($string)) {
2 //If the string is longer than five characters
3}

Men när man väl känner till att en sträng kan behandlas som en array:

1//Remember, an array starts at 0
2if(isset($string[5])) {
3 //If the string is longer than five characters
4}
1//Remember, an array starts at 0
2if(isset($string[5])) {
3 //If the string is longer than five characters
4}

Användsningsområderna med det här genomförandet är inte riktigt lika många som med strlen(), men efter att ha kört ett par prestandatester (en while-loop som repeterades en miljon gånger, med en if-sats som om är sann adderar med ett) så visar det sig att isset()-metoden är upp till 3,6 gånger mer effektiv än strlen().

Varför är det så här? Jag har inte lyckats hitta mer information än att isset() är en "language construct" (lista över dessa på php.net) medan strlen() är en inbyggd funktion – vilket antagligen(?) förklarar skillnaderna i prestandan.