phpbar.de logo

Mailinglisten-Archive

[php] AW: [php] =?iso-8859-1?Q?gro=DFe?= Klassen in PHP ://

[php] AW: [php] =?iso-8859-1?Q?gro=DFe?= Klassen in PHP ://

Ulf Wendel UW_(at)_NetUSE.DE
Fri, 07 Jul 2000 16:12:17 +0200


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