Mein Problem ist das Abrufen des richtigen Objekttyps aus einer Methode, die aufgrund von inhistory einen "gemischten" Typ zurückgibt.Abrufen des untergeordneten Typs eines Objekts aus einer vom Vater geerbten Methode
Ich habe eine generische Liste Klasse bekam
class List
{
/**
* @var Item[]
*/
protected $items;
public function __construct()
{
$this->items = array();
}
/**
* @return Item[]
*/
public function getAll()
{
return $this->items;
}
/**
* @return Item
*/
public function getOne($index)
{
if (isset($this->items[$index])) {
return $this->items[$index];
}
return null;
}
}
enthält Element vom Typ Element, das eine generische Klasse ist entweder
class Item
{
/**
* @var string
*/
protected $name;
public function __construct($name)
{
$this->name = $name;
}
}
Solche generische Klassen erweitert werden durch N verschiedene Listen. Nur ein Beispiel
class UserList extends List
{
/* user-specific implementation */
}
class User extends Item
{
/* user-specific implementation */
}
Im Client-Code
$user_list = new UserList();
foreach ($user_list->getAll() as $user) {
echo $user->getEmailAddr();
}
Innerhalb des foreach ich nicht Code-Vervollständigung, weil meine getAll Methode (vom Vater geerbt) zurückkehrt Item [] oder gemischt [], kein Benutzer []. Dasselbe Problem mit der getOne-Methode. Ich möchte solche Methoden nicht überschreiben müssen.
Gibt es eine cleverere und elegantere Lösung? Vielen Dank
Die meisten IDEs werden einen Weg für Sie, um ihnen zu helfen, indem Sie angeben, welche Art in der Iteration verwendet wird. – PeeHaa