Raketenwilli: Nur für Männer: ;-) „Selbsterklärendes“ Beispiel Auto

Beitrag lesen

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