5.3.5 Methode set

Mit __set() kann einem Objekt Eigenschaften zugewiesen werden, die vorher nicht deklariert wurden. Wir wollen dem Objekt $ute aus unserem Beispiel nun bestandene Prüfungen und die zugehörigen Noten zuweisen. Statt alle möglichen Prüfungen als Eigenschaften zu deklarieren, was unpraktikabel ist, da Ute auch Lehrveranstaltungen aus anderen Fachbereichen belegen könnte, benötigen wir eine flexible Lösung, um Prüfungen und Noten hinzuzufügen.

<?php
class Student
{
    private $name = "keine Angabe";
    private $matrNumber = 0;      
    protected $exams = [];  // Eigenschaft $exams als assoz. Array

    public function __construct(string $name, int $matrNumber)
    {
        $this->matrNr = $matrNumber;
        $this->name = $name;
    }

    public function __set(string $subject, float $grade): void
    {
        $this->exams[$subject] = $grade;
    }
}

// Hauptprogramm
$ute = new Student("Ute", 7209999);
$ute->Internetprogrammierung = 1.3;

In Zeile 21 wird so getan, als gäbe es eine Eigenschaft Internetprogrammierung in der Klasse Student und dieser Eigenschaft wird der Wert 1.3 zugewiesen. Da es diese Eigenschaft aber nicht gibt, wird nachgeschaut, ob es eine __set()-Methode gibt, die stattdessen aufgerufen wird.

Anmerkung

Natürlich lassen sich die Prüfungen auch explizit über eine Methode setzen und auslesen, was normalerweise der bessere Programmierstil ist:

public function setExamResult(string $subject, float $grade): void