PHP-Klassen: Unterschied zwischen den Versionen

Aus Vokabulabor
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „* Kategorie:Tutorial * Kategorie:Programmierung * Kategorie:PHP = Links = * PHP * PHP-Funktionen * PHP-Anweisungen * PHP-Arrays * PHP-Klassen = 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:…“)
 
Zeile 28: Zeile 28:
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
<?php
<?php
class Vehicle {
class SentenceGenerator {
   protected $type;
   private $seed;
   protected $name;
   private $nouns;
   public function construct(string $type, string $name){
  private $verbs;
     $this->type = $type;
  private $adjectives;
     $this->name = $name;
   public function __construct(array $nouns, array $verbs, array $adjectives){
     $this->nouns = $nouns;
    $this->verbs = $verbs;
     $this->adjectives = $adjectives;
   }
   }
   public function identify(){
   public function random(int $max): int{
    echo "Typ: $this->type Name: $this->name\n";
    $rc = rand(0, $max - 1);
    return $rc;
   }
   }
   public function feature(){
   public function elementOf(array $array): string{
     echo "Ich kann fahren\n";
     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();
}
}
$carAlice = new Vehicle('car', 'M-AL-1234');
$carBob = new Vehicle('car', 'M-BO-4321');
echo "Alice:\n";
$carAlice->identify();
$carAlice->feature();
echo "Bob:\n";
$carBob->identify();
$carBob->feature();
</syntaxhighlight>
</syntaxhighlight>
* Eine Klassendefinition beginnt mit '''class''', es folgt ein Klassenname, danach eine geschweifte Klammer.
* Eine Klassendefinition beginnt mit '''class''', es folgt ein Klassenname, danach eine geschweifte Klammer.
Zeile 56: Zeile 67:
** Konvention: Klassenvariablennamen beginnen mit einem Kleinbuchstaben.
** Konvention: Klassenvariablennamen beginnen mit einem Kleinbuchstaben.
* Es folgen drei Methoden. Jede Methode ist syntaktisch eine Funktion.
* 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.
** Gibt es eine Methode mit dem Namen '''__construct''', ist das eine Funktion, die beim Erzeugen eines Objektes dieser Klasse aufgerufen wird.
** Auf eine Klassenvariable kann nur innerhalb der Klasse mittels $this-> zugegriffen werden: <code>$this->type = $type;</code>
** Auf eine Klassenvariable und auf eine Methode kann innerhalb der Klasse mittels $this-> zugegriffen werden: <code>$this->type = $type;</code>
* Die Klasse endet mit '}'.
* Die Klasse endet mit '}'.
* Eine Instanz einer Klasse wird mit '''new''' und dem Klassennamen, gefolgt von einem Klammerpaar, erzeugt.
* 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.
** Innerhalb der Klammer werden die Parameter der Methode '''__construct''' gesetzt.
* Eine Methode der Klasse wird mit dem Pfeiloperator '''->''' aufgerufen: <code>$carAlice->identify();</code>
* Eine Methode der Klasse wird mit dem Pfeiloperator '''->''' aufgerufen: <code>$generator->say();</code>

Version vom 14. Oktober 2023, 14:12 Uhr

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 $seed;
  private $nouns;
  private $verbs;
  private $adjectives;
  public function __construct(array $nouns, array $verbs, array $adjectives){
    $this->nouns = $nouns;
    $this->verbs = $verbs;
    $this->adjectives = $adjectives;
  }
  public function random(int $max): int{
     $rc = rand(0, $max - 1);
     return $rc;
  }
  public 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 $type und $name. Optional steht vor dem Variablennamen das Zugriffsrecht, hier protected.
    • 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();