dedlfix: Fehlerbehandlung in PHP mit MySQL

Beitrag lesen

echo $begrüßung;

// aus dem gekürzten $_SERVER['REQUEST_URI'] möchte ich nun den letzten Wert hinter dem letzten „/“
  define ('lastPath', array_pop (explode( '/', requestPath) ));

Meldet mir der Parser „Strict Standards: Only variables should be passed by reference“,

Er missbraucht hier die Array-Funktionen, um einen Teilstring zu bekommen. Das ist aber letztlich kürzer notierbar als Stringfunktionen zu verwenden. Diese geben nämlich beim Nichtvorhandensein der Suchzeichen ein false zurück, was gesondert ausgewertet werden muss und letzlich aufwendiger (zu notieren ist) als die Array-Methode ist. Der Grund für die Meldung ist jedenfalls, dass array_pop() ein Array per Referenz bekommen möchte. Referenzen gibt es aber nur auf Variablen. Vor PHP 4.4.0 war es jedoch ungestraft möglich, statt einer Referenz einen Ausdruck (Funktionsergebnis beispielsweise) zu übergeben.

define('lastPath', implode('', array_slice(explode('/', $s), -1)));

Das ist zwar nicht besonders schön, aber einzeilig und E_STRICT-meldungsfrei.

Auch dieses Konstrukt kann man auf die Verwendung von Zwischenarrays statt RegExp umschreiben:

/*
   * $_SERVER['REQUEST_URI'], alles nach dem Fragezeichen entfernen
   * also     „/seite/unterseite/begriff?parameter=test“
   * soll auf „/seite/unterseite/begriff“
   * gekürzt werden
  */
  define ('requestPath', preg_replace('|(.*)?(.*)+$|', "$1", $_SERVER['REQUEST_URI']));

define('requestPath', implode('', array_slice(explode('?', $_SERVER['REQUEST_URI']), 0, 1)));

Leider kann man den Arrayelementzugriffsoperator [$index] nur auf Variablen, nicht aber auf Ausdrücke wie Funktionsergebnisse anwenden, weswegen ich array_slice() und implode() verwende(n muss).

echo "$verabschiedung $name";