Schlagwort-Archive: Klasse

Frage an die PHP OOP-Experten: Typisierung von Klassenattributen

Die Überschrift hört sich komplizierter an als sie ist. Veranschaulichen wir das Problem mal an einem Beispiel. Ich habe eine Klasse Erde, Mars, Venus etc. Diese Klassen sehen so aus:
[code lang=’php‘]
class Erde{
var $name;
var $groesse;
var $avgEntfernungZurSonne;
var $bevoelkerung;

function __construct(…) {

}

function eineFkt(…) {

}
}
[/code]

Nun habe ich noch eine Klasse Sonnensystem. Und diese Klasse soll als Attribute die einzelnen Planeten beinhalten, also:
[code lang=’php‘]
class Sonnensystem{
var $erde;
var $venus;
var $mars;

function __construct($erde, $venus,…) {
$this->erde = $erde;
$this->venus = $venus;

}

function gebReihenfolgeDerPlanetenAbSonne() {
$arrayEntfernung =
($this->erde->name => $this->erde->avgEntfernungZurSonne,
$this->venus->name => $this->venus->avgEntfernungZurSonne,
…) ;

}
}
[/code]
Das Problem ist jetzt, dass NetBeans in Sonnensystem::gebReihenfolgeDerPlanetenAbSonne() nicht weiß, von welchem Typ die Variablen $this->erde und $this->venus sind. Denn die werden ja nirgendwo genauer in der Klasse Sonnensystem spezifiziert. Folglich kann mir NetBeans auch nicht vorschlagen, welche Attribute/Methoden ich bei $this->erde aufrufen möchte. Das finde ich allerdings extrem schwach, denn genau deswegen setze ich ja ein IDE ein.

Mir sind zwar bei Recherchen Schlagwörter wie z.B. Typehinting über den Weg gelaufen, aber das könnte ich ja nur im Konstruktor einsetzen und dann wäre nur dort sicher gestellt, dass $erde eine Instanz der Klasse Erde ist und hilft folglich nicht wirklich weiter.

Also, mal konkretisiert: Wie kann ich in PHP festlegen, dass ein Attribut von einem bestimmten Typ ist. So zumindest nicht:
[code lang=’php‘]
class Sonnensystem{
var Erde $erde;

[/code]

Update + Update + Update + Update
Damit die IDE NetBeans weiß, von welchem Typ ein Klassen-Attribut ist, muss man PHPDoc-Kommentare verwenden:
[code lang=’php‘]
class Sonnensystem{
/**
* @var Erde
**/
private $erde;

[/code]

Felix schlug dann noch vor, das Attribut auf „private“ zu setzen und dann im Konstruktor mit TypeHinting zu arbeiten. Das funktionierte bei mir in NetBeans allerdings nicht. Da scheint es also Unterschiede zwischen den IDEs zu geben.