Referenzen in PHP

Wer braucht schon Referenzen in PHP? Wenn man nun alles in PHP elegant via objektorientierter Programmierung erledigt ist diese Frage eigentlich gar kein Thema für den Alltag.

Was aber tun wenn man nun doch damit konfrontiert wird, so stelle ich fest, dass man die Referenzierung sowohl bei der Definition als auch beim Abruf explizit aufzeigen muss.

Angenommen ich möchte außerhalb meiner Klasse per Referenz auf die geschützte Eigenschaft $wheels Einfluss nehmen muss zunächsteinmal in der Methode getWheels() diese als Referenz mittles dem &-Operator definiert werden.

class Car {
    protected $wheels = 4;

    public function &getWheels() {
        return $this->wheels;
    }
}

Instanziere ich nun die Klasse kann ich nur per erneuter Angabe des &-Operators auf der Gegenstelle den Wert in dem Objekt beeinflussen.

$bmw = new Car();
$myWheels = &$bmw->getWheels();
$myWheels = 6;

Bein Abruf des Objekts $bmw mittels

var_dump( $bmw );

sehen wir nun die per Referenz vorgenommene Änderung auch in der geschützten Eigenschaft des betroffenen Objekts:

object(Car)#1 (1) {
 ["wheels":protected]=>
 int(6)
}

Fazit

Dieses Vorgehen ist grundsätzlich nicht zu empfehlen und macht meiner Einschätzung nach nur in nachfolgenden Fällen Sinn:

  • Um komplexe Array- bzw. Datenstrukturen von außen zu manipulieren
  • Wenn große Datenmengen die Performance und den Speicherbedarf negativ beeinträchtigt
  • Bei Rekursionen
Man sollte sich meiner Einschätzung nach bei dieser Problemlösung stets folgende Fragen stellen:
  • Will ich meine intern verwendeten Variablen mittels dieser Zugriffsmethodik nach außen zugänglich machen?
  • Muss ich mich um meine Datenintegrität fürchten?
  • Sollte ein derartig eingeforderte Datenstruktur nicht besser in einem Objekt gekapselt werden?
  • Hat ein Auto mit sechs Reifen nicht einem höheren Rollwiderstand?

Veröffentlicht von

Sebastian

Als erfahrener Softwarentwickler entwickelt Sebastian in einer Softwareschmiede in Bonn Individualsoftware mit den Schwerpunkten in PHP und MySQL. Er hat eine pfiffige Frau sowie drei quirlige Söhne, fährt gerne Auto und liebt handwerkliche Arbeiten die im häuslichen Umfeld so anfallen.