<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:georss="http://www.georss.org/georss"> <channel><title>freakcommander &#187; oop</title> <atom:link href="http://www.freakcommander.de/tag/oop/feed/" rel="self" type="application/rss+xml" /><link>http://www.freakcommander.de</link> <description>Kann alles. Weiß alles. Macht alles.</description> <lastBuildDate>Sun, 05 Feb 2012 19:33:24 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Frage an die PHP OOP-Experten: Typisierung von Klassenattributen</title><link>http://www.freakcommander.de/2585/computer/frage-an-die-php-oop-experten-attribut-als-instanz-einer-anderen-klasse/</link> <comments>http://www.freakcommander.de/2585/computer/frage-an-die-php-oop-experten-attribut-als-instanz-einer-anderen-klasse/#comments</comments> <pubDate>Sun, 31 Jan 2010 12:28:01 +0000</pubDate> <dc:creator>crille</dc:creator> <category><![CDATA[Computer]]></category> <category><![CDATA[IDE]]></category> <category><![CDATA[Klasse]]></category> <category><![CDATA[NetBeans]]></category> <category><![CDATA[oop]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Typisierung]]></category> <guid
isPermaLink="false">http://www.freakcommander.de/?p=2585</guid> <description><![CDATA[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: class Erde{ var $name; var $groesse; var $avgEntfernungZurSonne; var $bevoelkerung; ... function __construct(...) { ... } function eineFkt(...) { ... } } Nun habe ich [...]]]></description> <content:encoded><![CDATA[<p>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:</p><pre class="brush: php">
class Erde{
var $name;
var $groesse;
var $avgEntfernungZurSonne;
var $bevoelkerung;
...
function __construct(...) {
...
}
function eineFkt(...) {
...
}
}
</pre><p>Nun habe ich noch eine Klasse Sonnensystem. Und diese Klasse soll als Attribute die einzelnen Planeten beinhalten, also:</p><pre class="brush: php">
class Sonnensystem{
var $erde;
var $venus;
var $mars;
...
function __construct($erde, $venus,...) {
$this-&gt;erde = $erde;
$this-&gt;venus = $venus;
...
}
function gebReihenfolgeDerPlanetenAbSonne() {
$arrayEntfernung =
($this-&gt;erde-&gt;name =&gt; $this-&gt;erde-&gt;avgEntfernungZurSonne,
$this-&gt;venus-&gt;name =&gt; $this-&gt;venus-&gt;avgEntfernungZurSonne,
...) ;
...
}
}
</pre><p>Das Problem ist jetzt, dass NetBeans in Sonnensystem::gebReihenfolgeDerPlanetenAbSonne() nicht weiß, von welchem Typ die Variablen $this-&gt;erde und $this-&gt;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-&gt;erde aufrufen möchte. Das finde ich allerdings extrem schwach, denn genau deswegen setze ich ja ein IDE ein.</p><p>Mir sind zwar bei Recherchen Schlagwörter wie z.B. <a
href="http://php.net/manual/de/language.oop5.typehinting.php">Typehinting</a> ü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.</p><p>Also, mal konkretisiert: Wie kann ich in PHP festlegen, dass ein Attribut von einem bestimmten Typ ist. So zumindest nicht:</p><pre class="brush: php">
class Sonnensystem{
var Erde $erde;
...
</pre><p><strong>Update + Update + Update + Update</strong><br
/> Damit die IDE NetBeans weiß, von welchem Typ ein Klassen-Attribut ist, muss man PHPDoc-Kommentare verwenden:</p><pre class="brush: php">
class Sonnensystem{
/**
* @var Erde
**/
private $erde;
...
</pre><p>Felix schlug dann noch vor, das Attribut auf &#8220;private&#8221; 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.</p><p>Auch interessant:<ol><li><a
href='http://www.freakcommander.de/2603/computer/php-foreach-variablen-typ-definieren/' rel='bookmark' title='PHP: Foreach Variablen Typ definieren'>PHP: Foreach Variablen Typ definieren</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.freakcommander.de/2585/computer/frage-an-die-php-oop-experten-attribut-als-instanz-einer-anderen-klasse/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
