Ein kleiner Beitrag zum Thema "Know your PHP" and "Don't outsmart the PHP engine".
Folgende Ausgangsituation sei gegeben: eine URI/URL soll anhand ihrer Slashes in Segmente zerlegt werden. Dieses Problem tritt häufig beim URL-Routing/Mapping auf.
/**
* remove multiple slashes
*/
while($url = strpos($url, '//') !== false)
{
$url = str_replace('//', '/', $url);
}
/**
* The slashes (/)
*/
# Segmentize the url into an array
$url_split = explode('/', $url);
# get rid off the first element of the URI (that's the first slash)
array_shift($url_split);
# unset the request url string
unset($url);
/**
* The empty segments
*/
foreach($url_split as $key => $value)
{
if(e mpty($value))
{
unset($url_split[$key]);
}
}
# reindex the array with array_values, because unset does not reindex
$url_split = array_values($url_split);
Nach Refaktorisierung* sieht das so aus:
*Und? Wiedermal keine Ahnung was Refaktorisierung bedeutet?
Refaktorisierung (engl. refactoring) ist die Verbesserung der Codequalität ohne dabei die Funktionalität zu verändern.
$uri_split = preg_split('#/#', $uri, -1, PREG_SPLIT_NO_EMPTY);
PHP's PCRE Funktionen (kurz auch "preg" Funktionen) gelten zwar allgemein als langsam.
Stellt man jedoch die Anzahl der Funktionsaufrufe an den PHP-Kern im ersten Codeabschitt
ins Verhältnis mit der längeren Laufzeit der Preg-Funktion, dann ergibt sich auch ohne genaues Benchmarking ein Zeitgewinn. Die Refaktorisierung erweist sich also als Vorteilhaft. Aber es gibt auch Nachteile: gegenüber einfacheren String- und Array Befehlen ist das Wissen über Regexp und PCRE oftmals nicht vorhanden. Daher würden viele schon gar nicht auf diesen Lösungsansatz kommen.
Regeln:
1. Don't outsmart the PHP engine.
2. Know your PHP.