PHP und Objektorientierung: Teil 1, Aufbau einer Klasse

Informatics
5

PHP Bear

Eine Einführung in Objektorientierung (OOP) in PHP. PHP 5 wohlgemerkt, was einen großen Unterschied macht, denn in PHP 4 sah der Aufbau einer Klasse noch etwas anders aus und sie taugten auch weniger. Und ja, das ist ein Bär.

Wozu Klassen

Stellt euch vor, ihr sucht gerade und sofort ein langes Küchenmesser, um euch gegen einen Bären zur Wehr zu setzen. Ihr seht ihn schon durch das Fenster den Eingangsweg hoch­trappsen. Panisch reißt ihr die große Truhe auf, in der ihr ALLE eure Werkzeuge aufbewahrt. Wo ist bloß das … Der Bär tritt die Tür aus den Angeln, als wäre sie aus Styropor. Mixer? Nein. Zollstock? Nein. Handstaubsauger? Ach, da war der also. Mit einem starken Seitenhieb befördert euch eine beharrte Pranke durch den Raum.

Das passiert, wenn man keine Klassen verwendet. Sonst hättet ihr gewusst, dass sich das Küchenmesser in der Küchenschublade befindet, wo es hingehört. Der Handstaubsauger wäre auch nicht verloren gegangen, sondern hätte wie üblich in der Abstellkammer gestanden, wo er hingehört.

Einige Vorzüge von Klassen liegen nun darin:

  • Gruppierung thematisch zusammengehöriger Funktionen
  • Code-Wiederverwendung wird gefördert
  • Halten von Zuständen/Informationen wird erleichtert
  • Realwelt-Abbildung fördert Code-Verständnis

Zusammengefasst liest sich das als: Der Code wird organisierter und verständlicher, was wiederum auch dessen Wartung und Weiterentwicklung vereinfacht. Oh, ihr werdet Klassen lieben.

Aufbau einer Klasse

class Comment {

  // Attributes
  protected $author;
  protected $content;

  // constructor
  public function __construct( $author, $message ) {
    $this->author = $author;
    $this->content = $message;
  }

  // Methods of class
  public function show_message() {
    echo 'by: ' . $this->author . '<br />';
    $text = $this->filter_content( 'honey' );
    echo $text;
  }

  protected function filter_content( $filter ) {
    return str_ireplace( $filter, '-----', $this->content );
  }

}

Die Klasse Comment soll einen sehr grundlegenden Kommentar darstellen. Das Schlüssel­wort class leitet die Klasse ein. Klassennamen sollten immer mit einem Großbuchstaben be­ginnen, sowie eine eigene Datei bekommen, die noch dazu gleich heißt. Unsere Klasse Comment stände also in der Datei Comment.php.

Konstruktor

public function __construct( $author, $message ) {
  $this->author = $author;
  $this->content = $message;
}

Man beachte die zwei Unterstriche am Anfang. Mit dem Konstruktor wird ein Objekt der Klasse erstellt. Man ruft ihn allerdings nicht explizit auf. Die Syntax sieht so aus:

$foo = new Comment( 'Seba', 'There is honey in my cupboard!' );

Dem Konstruktor werden hier die beiden Werte 'Seba' und 'There is honey in my cupboard!' übergeben, die er in den Objekt-Attributen speichert.

Attribute

protected $author;
protected $content;

Variablen der Klasse bezeichnet man als Attribute. Diese sind in ihren Werten für jedes erzeugte Objekt individuell. Mit dem Schlüsselwort $this-> kann in den Methoden auf sie zugegriffen werden, wie hier:

protected function filter_content( $filter ) {
  return str_ireplace( $filter, '-----', $this->content );
}

Man kann ihnen auch Standardwerte vorgeben:

protected $author = 'Anonymous';

Methoden

public function show_message() {
  echo 'by: ' . $this->author . '<br />';
  $text = $this->filter_content( 'honey' );
  echo $text;
}

protected function filter_content( $filter ) {
  return str_ireplace( $filter, '-----', $this->content );
}

Funktionen der Klasse werden auch Methoden genannt. Innerhalb der Klasse werden andere zugehörige Methoden mit dem Schlüsselwort $this-> aufgerufen – wie die Attribute.

Die erste Methode gibt den Kommentar aus, während die zweite Wörter ersetzt. filter_content() filtert das Wort „honey“ heraus … sonst werden noch weitere Bären angelockt und fangen an zu randalieren.

Verwendet

Schlussendlich ein Beispiel, wie die Klasse verwendet wird:

$comment = new Comment( 'Seba', 'There is honey in my cupboard!' );
$comment->show_message();

/*
by: Seba
There is ----- in my cupboard!
*/

Links zum Mehrlesen

Wie geht es weiter?

Wenn Klassen etwas Neues für euch sind, dann werdet ihr euch vermutlich gewundert haben, was es mit den Schlüsselwörtern public und protected genau auf sich hat. Dazu komme ich im 2. Teil von PHP und OOP mit dem Thema Sichtbarkeit.