# 5.2.2 Ergebnisse eines Methodenaufrufs verarbeiten

Vorab eine Anmerkung: bei Funktionen (also nicht objektorientiert) sah es wie folgt aus.

    <?php
    function changePhoneNumber($newPhoneNumber, $name)

Bisher haben wir eine Methode und deren Variablen immer in einer Zeile geschrieben.

Wenn die Zeile aber zu lang wird, dann gibt es eine Schreibregel für einen Zeilenumbruch. Wir ändern also am Sourcecode nichts, nur schreiben wir dies anders hin.

    <?php
    public function changePhoneNumber(
        string $newPhoneNumber,
        string $name
    ): void

`$newPhoneNumber` und `$name` sind also weiterhin die Variablen, deren Inhalte an die Methode übergeben werden.

Es gibt drei unterschiedliche Möglichkeiten, mit den Ergebnissen eines Methodenaufrufs im Hauptprogramm zu arbeiten.

## 1. Speichern im Objekt (in einer Eigenschaft)

Beispiel

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    class Student
    {
       public $phoneNumber = "keine Angabe";
       public $name = "keine Angabe";

       public function changePhoneNumber(
           string $newPhoneNumber,
           string $name
       ): void {
           $this->phoneNumber = $newPhoneNumber;
           $this->name = $name;
       }
    }

    // Hauptprogramm
    $max = new Student;
    echo "Methode aufrufen<br>";
    $max->changePhoneNumber("0170123456", "Max");  // Methodenaufruf

    echo "<br>Eigenschaften auslesen<br>";
    echo "Im Objekt gespeicherte Daten von $max->name: $max->phoneNumber";

Ausgabe:
Methode aufrufen
Eigenschaften auslesen
Im Objekt gespeicherte Daten von Max: 0170123456

In diesem Beispiel übergibt die Methode `changePhoneNumber()` keine Werte an das Hauptprogramm, sondern speichert diese in der Eigenschaft `$phoneNumber` des Objekts `$max`. Somit kann das Hauptprogramm auf die Eigenschaft zugreifen und den Wert hieraus lesen (siehe Zeile 22).

Bitte beachten Sie:

- In Zeile 4 haben wir `$name` als Eigenschaft der Klasse definiert, die an jeder Stelle in der Klasse mit `$this->name` ausgelesen oder verändert werden kann.
- In Zeile 8 haben wir eine Variable `$name`, die nur innerhalb der Methode gültig ist.

Beide `$name` haben nichts gemeinsam außer dem Namen "name"!

Erst in Zeile 11 wird der Wert der Variable `$name` nun an die Eigenschaft `$name` übergeben, auf die in der Methode wie beschrieben mit `$this->name` angesprochen wird.

## 2. Rückgabe mit return

Beispiel

Mit `return` wird ein Ergebnis aus einer Methode an das Hauptprogramm gegeben.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    class Student
    {
       public $phoneNumber = "keine Angabe";
       public $name = "keine Angabe";

       public function changePhoneNumber(
           string $newPhoneNumber,
           string $name
       ): string {
           $this->phoneNumber = $newPhoneNumber;
           $this->name = $name;

           return $this->phoneNumber;
       }
    }

    // Hauptprogramm
    $max = new Student;
    echo 'Methode aufrufen und return-Wert in $data speichern<br>';
    $data = $max->changePhoneNumber("0170123456", "Max");  // Methodenaufruf

    echo "Mit return zurückgegebenen Tel.-Nr.: $data";

Ausgabe:
Methode aufrufen und return-Wert in $data speichern
Mit return zurückgegebenen Tel.-Nr.: 0170123456

Möchte man mehrere Daten aus einer Methode an das Hauptprogramm mit `return` übergeben, so kann man die Daten in der Methode in ein Array schreiben und das Array übergeben.

## 3. Direkt eine Ausgabe mit `echo` erzeugen

Beispiel

Auch die direkte Ausgabe aus der Methode ist prinzipiell denkbar.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    class Student
    {
       public $phoneNumber = "keine Angabe";
       public $name = "keine Angabe";

       public function changePhoneNumber(
           string $newPhoneNumber,
           string $name
       ): void {
           $this->phoneNumber = $newPhoneNumber;
           $this->name = $name;

           echo "Ausgabe erfolgt in der Methode <br>";
           echo "$this->name: $this->phoneNumber";
       }
    }

    // Hauptprogramm
    $max = new Student;
    echo "Methode aufrufen <br>";
    $max->changePhoneNumber("0170123456", "Max");  // Methodenaufruf

Ausgabe:
Methode aufrufen
Ausgabe erfolgt in der Methode
Max: 0170123456

Dieses 3. Beispiel ist "absolut unschön". Das Problem dabei ist, dass ein Teil der Ausgabe im Hauptprogramm erfolgt und ein anderer Teil in der Methode. Außerdem ist in der Methode die Verarbeitung (Daten in Eigenschaften füllen) und die Datenausgabe vermischt. Eventuell ist die Ausgabe zum jetzigen Zeitpunkt noch gar nicht erwünscht oder das Format soll erst später festgelegt werden, daher sollte eine Ausgabe nicht in den Methoden stattfinden.

## Methodenname zuvor in einer Variablen speichern

Beispiel

Es gibt Situationen, in denen zuvor der Methodenname in einer Variablen gespeichert wird. Schauen Sie sich den Sourcecode genau an, denn diese Art des Aufrufs benötigen wir später noch. Die Klasse ist wie im 2. Beispiel geschrieben und wir haben nur eine kleine Änderung im Hauptprogramm vorgenommen (Zeile 26 und Zeile 28).

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    class Student
    {
       public $phoneNumber = "keine Angabe";
       public $name = "keine Angabe";

       public function changePhoneNumber(
           string $newPhoneNumber,
           string $name
       ): string {
           $this->phoneNumber = $newPhoneNumber;
           $this->name = $name;

           return $this->phoneNumber;
       }
    }

    // Hauptprogramm
    $max = new Student;
    // Methodennamen als String einer Variablen zugewiesen
    $methodname = "changePhoneNumber";

    echo 'Methode aufrufen und return-Wert in $data speichern<br>';
    // Methodenaufruf erfolgt mit der Variablen $methodname
    $data = $max->{$methodname}("0170123456", "Max");

    echo "Mit return zurückgegebenen Tel.-Nr.: $data";

Ausgabe:
Methode aufrufen und return-Wert in $data speichern
Mit return zurückgegebenen Tel.-Nr.: 0170123456
Der Namen ist: Max
Eigenschaft $name zuvor in einer Variablen speichern
Der Namen ist: Max

Wir haben also gezeigt, wie ein Objekt eine Variable zum Aufruf einer Methode (siehe Zeile 28) oder einer Eigenschaft (siehe Zeilen 37) nutzen kann.

In den Zeilen 26 und 35 sind die geschweiften Klammern nicht zwingend notwendig. Diese Klammern sollten Sie aber unbedingt zur besseren Lesbarkeit verwenden, denn so wird eindeutig klar, dass man eine Variable in den geschweiften Klammern hat.