PHP-Klassen
Links
Zielsetzung
Es soll das Grundprinzip der objektorientierten Programmierung gezeigt werden.
Beschreibung
Eine Klasse ist ein Container mit Daten, der zusätzlich Operationen mit diesen Daten durchführen kann.
Eine Klasse B kann alle Elemente einer anderen Klasse A erben:
- Die Daten von A sind auch in B verfügbar
- Die Operationen von A sind auch in B verfügbar.
Eine Klasse beschreibt ein eine zusammengesetzte Entität (Ding oder Idee) aus der realen Welt, analog einer Tabelle in SQL.
Die Attribute der Entität sind die "Klassenvariablen". Die Operationen werden "Methoden" genannt und syntaktisch das gleiche wie Funktionen.
Eine PHP-Klasse
<?php
class SentenceGenerator {
private $nouns;
private $verbs;
private $adjectives;
public function __construct(array $nouns, array $verbs, array $adjectives){
$this->nouns = $nouns;
$this->verbs = $verbs;
$this->adjectives = $adjectives;
}
private function random(int $max): int{
$rc = rand(0, $max - 1);
return $rc;
}
private function elementOf(array $array): string{
return $array[$this->random(count($array))];
}
public function say(){
$rc = 'A ' . $this->elementOf($this->adjectives) . ' '
. $this->elementOf($this->nouns) . ' '
. $this->elementOf($this->verbs) . ' '
. ' a ' . $this->elementOf($this->adjectives) . ' '
. $this->elementOf($this->nouns);
echo "$rc\n";
}
}
$nouns = ['tiger', 'tree', 'house', 'bicycle', 'pot', 'fish'];
$verbs = ['knows', 'likes', 'makes', 'wins'];
$adjectives = ['dirty', 'green', 'little', 'curious', 'blue', 'pretty'];
$generator = new SentenceGenerator($nouns, $verbs, $adjectives);
for ($ix = 1; $ix < 20; $ix += 1){
$generator->say();
}
- Eine Klassendefinition beginnt mit class, es folgt ein Klassenname, danach eine geschweifte Klammer.
- Konvention: Klassennamen beginnen mit einem Großbuchstaben.
- Es folgen die Klassenvariablen, hier $nouns, $verbs und $adjectives. Optional steht vor dem Variablennamen das Zugriffsrecht, hier private.
- Konvention: Klassenvariablennamen beginnen mit einem Kleinbuchstaben.
- Es folgen drei Methoden. Jede Methode ist syntaktisch eine Funktion.
- Gibt es eine Methode mit dem Namen __construct, ist das eine Funktion, die beim Erzeugen eines Objektes dieser Klasse aufgerufen wird.
- Auf eine Klassenvariable und auf eine Methode kann innerhalb der Klasse mittels $this-> zugegriffen werden:
$this->type = $type;
- Die Klasse endet mit '}'.
- Eine Instanz einer Klasse wird mit new und dem Klassennamen, gefolgt von einem Klammerpaar, erzeugt.
- Innerhalb der Klammer werden die Parameter der Methode __construct gesetzt.
- Eine Methode der Klasse wird mit dem Pfeiloperator -> aufgerufen:
$generator->say();