Mailinglisten-Archive |
Gloss Mathias wrote: > > Aloha nochmals, > > > ---------- > > Von: Ulf Wendel[SMTP:UW_(at)_NetUSE.DE] > > > > Methoden sind > > Bestandteil einer Klasse, eine Trennung ist nicht möglich. > > > *seufz* scheint so zu sein: > > Das tut nicht: > class foo { > include('funktion1.inc'); > } > > Das tut, ist aber wohl Unfug: > class foo { > function bar { > include('viel_script.inc'); > } > } Das ist ja auch wirr. Du weißt anscheinend nicht, was eine Klasse ist. Klassen und Objekte sind Begriffe aus der objektorientieren Programmierung. Klassen dienen dazu ein Programm aus einem Haufen großer Blackboxen aufzubauen, die jeweils eine Teilaufgabe des gesamten Programms erledigen. Die Blackboxen sind voneinander unabhängig, tauschen untereinander nur Nachrichten aus. Um den Gedanken der Blackbox in der Praxis umsetzen zu können, müssen Daten und Funktionen gekapselt werden können. Eine Klasse ist eine Blackbox aus dem obigen Bild. Die Klasse enthält Daten (Eigenschaften) und Funktionen (Methoden). Die Eigenschaften und Methoden sind gekapselt (encapsulation) und von außen nicht direkt ansprechbar (Blackbox). Eine Klasse besitzt also einen eigenen Namenraum (scope). Innerhalb einer Klasse gibt es Klassenvariablen (Eigenschaften), "einfache" Methoden und besondere Methoden: (Default-)Konstruktoren, (Default-)Dekonstruktoren. Jede Eigenschaft oder Methode kann in einer richtigen OO Sprache als öffentlich (public) und nicht öffentlich (private), oft auch als static, final und noch mehr deklariert werden. Ist die Eigenschaft oder Methode öffentlich, kann sie von außen zugegriffen werden, ansonsten nicht. Folgender Code macht überhaupt nichts: <?php class foo() { function foo() { print "class foo"; } } // end foo ?> Eine Klasse ist zunächst ein totes Ding und macht nichts. Erst eine lebendige Kopie des Musters foo kann etwas macht. Eine Kopie wird Objekt genannt. <?php $f = new foo(); // druckt "class foo" ?> Oben steht etwas von besonderen Methoden. Eine Klasse kann eine Methode enthalten, die genauso heißt wie die Klasse selbst. Das ist der Konstruktor. Er wird immer ausgeführt wenn die Klassen instanziiert wird, man ein Objekt (Instanz) erzeugt. Ausführbarer Code innerhalb einer Klasse muß in einer Methode stehen. Ich hoffe, dein erstes Beispiel meldet einen Parse error. Das zweite Beispiel ist ähnlich sinnlos. Mit einem Aufruf der Methode bar() wird "include('viel_script.inc');" ausgeführt was sich selbt durch den Inhalt des angegebenen Files ersetzt und möglicherweise lokale Funktionen in der Methode bar() anlegt. Auf die kann man jedoch wie auch Funktionen in Funktionen nicht von außerhalb zugreifen. Also was soll das eigentlich? Wenn Du mehr als ein paar hundert Zeilen Code in einer Klasse vereinst wird jeder OO Fanatiker dazu raten das Klassenmodell zu überarbeiten. Nicht PHP hat hier ein Manko, sondern dein Programm. Wenn man in PHP schon mit OO arbeiten will, was im Vergleich sehr langsam sein kann, dann sollte man es richtig machen. Oder mit Blick auf die Performance einen prozedualen Stil beibehalten. Zieht Dir mal irgendeine OO Sprache rein, dann passiert Dir das nicht mehr. Egal ob Java, Objective-C, Smalltalk oder ein anderer Vertreter der reinen OO Lehre. Ulf -- Ulf Wendel NetUSE AG, Siemenswall, 24107 Kiel, Germany Fon: +49 431 386435 00 -- Fax: +49 431 386435 99
php::bar PHP Wiki - Listenarchive