PHP Vererbung allg. am bsp. Item und Listen zu spezialisieren Klassen

Allgemeine Objekte vom Typ Item und allgemeine Listen vom Typ ItemList, stellen gemeinsame Funktionen für die spezalisierten Objekte, z.b. hier Err & ErrList , zur Verfügung. Alle erbenden Klassen können typsicher diese Objekte nutzen

<?php



abstract class Item{

	private $val;

	/**
	* @param $val string
	*/
	public function __construct( $val ){
		$this -> val = $val;
	}


}


class Err extends Item {

	/**
	* @param string $val
	*/
	public function __construct( $val ){
		parent::__construct( $val );
	}


}


abstract class ItemList{

	/**
	* @var array
	*/
	private $items;

	public function __construct(){
		$this -> items = [];
	}

	/**
	* @param $item Item
	*/
	protected function add( $item ){

		if( $item instanceof Item ){
			$this -> items[] = $item;
		}

	}

	public function get(){
		return print_r(
			$this -> items
		);
	}

}


class ErrList extends ItemList {

	/**
	* @param Err $error
	*/
	public function add( $error ){
		if( $error instanceof Err ){
			parent::add( $error );
		}
	}

}


/**
* Liste vom Typ ErrList erstellen
*/
$error_liste = new ErrList();

/**
* Allg. Listenmethode add auf spezielle Liste ErrList anwenden
*/
$error_liste -> add( 
	new Err( 'Ein Fehler' ) #Objekinstanz direkt übergeben
);

/**
* Debugausgabe des konstruierten Objektes ( Interne Abbildung der Errors )
*/
$error_liste -> get();



?>
Ausgabe:

Array
 (
    [0] => Err Object
        (
            [val:Item:private] => Ein Fehler
        )

 )