Ich erkläre das - wegen der Offenkundigkeit - immer noch mit dem selbsterklärendem Beispiel Auto ...
<?php
class Car {
const MaxSpeed = 150;
const Colors = [ "white", "black", "red" ];
private $speed = 0;
private $color;
const Price = 30000;
const PriceExtraColor = 2000;
private $price;
public $nickname;
function __construct( $color = false ) {
if ( $color == false ) {
$color = self::Colors[ 0 ];
}
trigger_error( "Hinweis: Es wurde die Farbe '$color' gewählt.", E_USER_NOTICE );
$this->setColor( $color );
}
private function setColor ( $color ) {
$this->color = strtolower( trim( $color ) );
if ( ! in_array( $color, self::Colors ) ) {
$this->price = self::Price + self::PriceExtraColor;
trigger_error( "Hinweis: Es wird auf Grund der Farbangabe '$color' ein Zuschlag berechnet.", E_USER_NOTICE );
} else {
$this->price = self::Price;
}
}
function speedUp( $val ) {
if ( ! is_numeric( $val ) ) {
trigger_error( 'Fehler: Es wurde keine Zahl übergeben', E_USER_ERROR );
return false;
}
if ( self::MaxSpeed <= ( $this->speed + $val ) ) {
$this->speed = self::MaxSpeed;
trigger_error( 'Notiz: MaxSpeed erreicht', E_USER_NOTICE );
} else {
$this->speed = $this->speed + $val;
}
if ( $this->speed < 0 ) {
$this->speed = 0;
}
return true;
}
function speedDown( $val ) {
if ( 'full' == $val ) {
$this->speed = 0;
} else {
$this->speedUp( -1 * abs( $val ) );
}
return true;
}
public function getColor() {
return $this->color;
}
public function getPrice() {
return $this->price;
}
function getSpeed() {
return $this->speed;
}
}
$myCars=[];
$myCars[0] = new Car();
$myCars[0]->nickname = "Dienstwagen";
$myCars[1] = new Car('grün');
$myCars[1]->nickname = "Frosch";
foreach ( [0,1] as $i ) {
echo "Auto mit Spitzname '" ,$myCars[ $i ]->nickname, "' in ", $myCars[ $i ]->getColor(), " kostet ", $myCars[ $i ]->getPrice(), PHP_EOL;
echo "Fährt jetzt:", $myCars[ $i ]->getSpeed(), PHP_EOL, PHP_EOL;
echo "Versuche, um 20 zu beschleunigen...", PHP_EOL;
$myCars[ $i ]->speedUp( 20 );
echo "Fährt jetzt:", $myCars[ $i ]->getSpeed(), PHP_EOL, PHP_EOL;
echo "Versuche, um 150 zu beschleunigen...", PHP_EOL;
$myCars[ $i ]->speedUp( 150 );
echo "Fährt jetzt:", $myCars[ $i ]->getSpeed(), PHP_EOL, PHP_EOL;
echo "Versuche, um 45 zu bremsen...", PHP_EOL;
$myCars[ $i ]->speedDown( 45 );
echo "Fährt jetzt:", $myCars[ $i ]->getSpeed(), PHP_EOL, PHP_EOL;
echo "Versuche Vollbremsung...", PHP_EOL;
$myCars[ $i ]->speedDown('full');
echo "Fährt jetzt:", $myCars[ $i ]->getSpeed(), PHP_EOL, PHP_EOL, PHP_EOL;
}
Ausgaben:
PHP Notice: Hinweis: Es wurde die Farbe 'white' gewählt. in /home/fastix/test.php on line 18
PHP Notice: Hinweis: Es wurde die Farbe 'grün' gewählt. in /home/fastix/test.php on line 18
PHP Notice: Hinweis: Es wird auf Grund der Farbangabe 'grün' ein Zuschlag berechnet. in /home/fastix/test.php on line 28
Auto mit Spitzname 'Dienstwagen' in white kostet 30000
Fährt jetzt:0
Versuche, um 20 zu beschleunigen...
Fährt jetzt:20
Versuche, um 150 zu beschleunigen...
PHP Notice: Notiz: MaxSpeed erreicht in /home/fastix/test.php on line 43
Fährt jetzt:150
Versuche, um 45 zu bremsen...
Fährt jetzt:105
Versuche Vollbremsung...
Fährt jetzt:0
Auto mit Spitzname 'Frosch' in grün kostet 32000
Fährt jetzt:0
Versuche, um 20 zu beschleunigen...
Fährt jetzt:20
Versuche, um 150 zu beschleunigen...
PHP Notice: Notiz: MaxSpeed erreicht in /home/fastix/test.php on line 43
Fährt jetzt:150
Versuche, um 45 zu bremsen...
Fährt jetzt:105
Versuche Vollbremsung...
Fährt jetzt:0