OOP in PHP: Getter und Setter als Magic Methods

Vereinfache den lesenden und schreibenden Zugriff auf bestimmte Eigenschaften eines Objekts [PHP]

In PHP gibt es die sogenannten Magic Methods. Eine dieser Methoden hat den Namen __call() und der Interpreter versucht, diese Methode aufzurufen, wenn über das Objekt eine Methode aufgerufen wurde die es in der entsprechenden Klasse gar nicht gibt. Ein solches Verhalten kann man sich zunutze machen, um beispielsweise Getter und Setter zu implementieren ohne diese Getter und Setter im Einzelnen zu definieren. Untenstehender PHP-Code zeigt eine solche Verwendung. Über die außerhalb der Klasse erstellte Instanz werden einfach Methoden aufgerufen die denselben Namen haben wir die gewünschten Eigenschaften. Sofern ein Argument übergeben wird, wird die Eigenschaft gesetzt, ansonsten wird bei jedem Aufruf der zur Eigenschaft gehörige Wert, soweit vorhanden, zurückgegeben.

class Demo{
    function __construct(){
        $this->ATT = array();
    }
    function __call($name, $a){
        if( isset($a[0]) ){
            $this->ATT[$name] = $a[0];
        }
        return isset($this->ATT[$name]) ? $this->ATT[$name] : '';
    }
}


$d = new Demo();
# Setter: Setze Attribute
$d->title("Der Titel für die Seite");
$d->descr("Eine Bescheibung für die Seite");
# Getter: Attribute ausgeben
echo
 $d->title(), "\n",
 $d->descr(), "\n",
 print_r($d,1);

Obenstehende Demo gibt folgendes aus:

Der Titel für die Seite
Eine Bescheibung für die Seite
Demo Object
(
    [ATT] => Array
        (
            [title] => Der Titel für die Seite
            [descr] => Eine Bescheibung für die Seite
        )

)

Warum überhaupt Getter und Setter

Nun, die Antwort ist diese hier: Erstens vereinfacht es den wahlfreien Zugriff auf öffentliche Eigenschaften ohne die interne Struktur bekanntzugeben. Zweitens bleibt die Methode immer gleich, auch wenn sich die interne Struktur einmal ändern sollte.


Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. nmq​rstx-18­@yahoo.de