Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Eine Klasse = Eine Datei; Verlinkung geht aber nicht.

Hallo,

letztes Jahr hieß es in der Uni, dass "jede" Klasse in eine separate Datei hineingehört (C++). Diesem Gedanken leistete ich Folge, nicht nur in C++, sondern auch in PHP. Nur irgendwie funktioniert die Vererbung, Erweiterung, etc. ja überhaupt nicht.

Wenn ich versuche, auf eine andere Klasse zuzugreifen, dann bekomme ich die Meldung, dass zB die Methode nicht verfügbar ist. Mir fiel ein, dass es ev. möglich ist, zB im Konstruktor eine andere Klasse (somit auch eine andere Datei) mit dem Befehl "include" zu implementieren. Für mich sieht das aber nicht richtig aus, um ehrlich zu sein, umständlich. Dann versuchte ich folgendes: Alle Klassen (somit viele Dateien) inkludiere ich in eine app.inc.php-Datei. Doch irgendwie kann ich nachwievor nicht von einer Klasse auf andere zugreifen.

Ich bin nun ein bissal ratlos, wie ich das Problem lösen könnte. Ich habe nämlich nicht die Absicht, Methoden zu kopieren und diese in anderen Klassen einzufügen.

Bitte um Ideen.

Gruß, H.

Hier gehts zum Orginal Eintrag "Eine Klasse = Eine Datei; Verlinkung geht aber nicht." im Forum

Antworten

http://de3.php.net/autoload


2.

Interessante Funktion. Herzlichen Dank für den heißen Tipp. Leider kann ich diesen "noch nicht" umsetzen, da auf meinem Server noch irgend eine 4er Version von PHP läuft. Gibt's keine andere Lösung?

Gruß, Hannes


3.

doch, alle benötigten Klassen von Hand per Include einbinden.
Ich seh eh nicht ganz wo dein Problem liegt. Schau dir doch mal zb die Klassen des Zend Frameworks an, da werden bei jeder Klasse alle benötigten miteingebunden.
http://framework.zend.com


4.

Ich glaub, dass du mein Problem nicht ganz verstanden hast. Dabei hab ich's doch gut formuliert. Egal, noch einmal:

1) Ich habe mehrere Klassen
2) Jede Klasse befindet sich in einer separaten Datei (zB edit.class.php).
3) In vielen meiner Klassen gibt es Konstruktoren.
4) In vielen dieser Konstruktoren steht dasselbe geschrieben, zB:

Code:                   In Zwischenablage kopieren (nur IE)
1">

Ich will nicht, dass ich in all diesen Klassen mit Hilfe von Copy/Paste den Konstruktor einfüge. Da steckt keine Dynamik dahinter. Es soll eine Datei geben, in der der Konstruktor nur 1x auf diese Art und Weise, wie's oben ersichtlich ist, geschrieben steht. Denn wenn ich diesen Konstruktor einmal ändere, dann will ich ihn nicht xx-Mal ändern müssen, sondern nur 1x.

Bitte daher um Hilfe. Hab's heute mit ein paar Include-Varianten probiert. Doch ich bekam immer die Meldung, dass "redeclare" nicht möglich ist!?! Mit autoload kann ich auch nicht arbeiten, da alles auf php4 basiert (lasst euch von __construct() nicht täuschen).

Gruß, h.


5.

Code:                   In Zwischenablage kopieren (nur IE)
2">

Lesen:
http://www.php.net/manual/de/language.oop.php
http://www.php.net/manual/de/language.oop5.php

Nutze "parent::"


6.

Deshalb schrieb ich doch, dass du dich nicht täuschen lassen sollst. Mir ist auf die Schnelle nichts Besseres eingefallen. Danke für die Links, diese sind mir aber schon bekannt. Leider konnten die mein Problem auch nicht lösen. Wenn ich zB mit parent:: arbeite, dann kommt wieder eine Fehlermeldung, nämlich:

[05-Sep-2006 21:29:14] PHP Fatal error: Cannot redeclare class createtable in /xxx/createtable.class.php on line 3

Sobald ich innerhalb einer Methode was mit Include mach, gibt's diese Fehlermeldung.
Hinweis: Alle Klassen werden in einer Datei namens app.inc.php zusammengeführt (mit include).


7.

Noch etwas: Mich wundert's, dass noch keiner empfohlen hat, alle Klassen in eine Datei zu speichern. Dieser Gedanke ging mir auch schon durch den Kopf, aber irgendwie endet dass in einem kleinen Chaos (zu viele Klassen). Außerdem wird bei vielen Ausschreibungen für Programmen (C++,PHP ...) verlangt, jede Klasse in eine Datei zu speichern. Anscheinend ein Trend.

Gruß, h.


8.

Zitat:
Sobald ich innerhalb einer Methode was mit Include mach
Das ist auch meist überflüssig...


Code:                   In Zwischenablage kopieren (nur IE)
3">

Code:                   In Zwischenablage kopieren (nur IE)
4">




9.

Danke für den Tipp. Aber sobald ich irgend etwas mit "include" mach, kommt die in meinem vorletzten Posting erwähnte Fehlermeldung. Grund:

*) Klasse 1 ist in der Datei app.inc.php inkludiert.
*) Klasse 2, in der nun Klasse 1 auch inkludiert wird, ist ebenfalls in der Datei app.inc.php inkludiert.

Somit inkludiere ich die Klasse 1 zwei Mal, wahrscheinlich der Grund der Fehlermeldung. Warum ist das so?

--> Mit Extend will ich nicht arbeiten, da ich sonst x Methoden in einer Klasse haben, von denen ich y nicht brauch.


10.

Wenn das so ist, dann lagere ich den Konstruktor einfach in eine separate Datei aus, denn so wird dieser ja nur 1x inkludiert, und die Fehlermeldung verschwindet.
Hat jmd. eine bessere Idee?


11.

Okay, hab den Fehler gefunden. Das Problem lag bei "include". Meinem Compiler ist wohl das "_once" abgegangen.


12.

Sorry, aber mache dich bitte mit den Grundprinzipien der OOP vertraut...
Was du da vorhast, ist gelinde gesagt, Unsinn!
Ich kann dir nicht helfen....
:D Die Sprache, mit der du arbeitest heist PHP und nicht "WünschDirWas" :D


Hier gehts zum Orginal Eintrag "Eine Klasse = Eine Datei; Verlinkung geht aber nicht." im Forum
 
phpforum.de | Impressum | Handy Bundles