Objektorientierte Programmierung verteilt auf mehrere Sourcefiles ?

PhoenixXP

Mitglied
Wenn ich mit PHP und OOP programmiere, dann stoße ich schnell auf das Problem, dass sich soviele Methoden sammeln, sodass es schnell unübersichtlich wird. Die würde ich dann gerne auf mehrere PHP-Dateien verteilen. Wie implementiere ich dann die Klasse?

Beispiel:

cls_main.php - Definition der Attribute, der Konstruktoren und der Destruktoren
cls_db.php - Datenbankschnittstelle, Abfragen

usw.
 
Zuletzt bearbeitet:
Hmm, glaube nicht, dass du die einfach so aufsplitten kannst, aber du könntest doch mit einer Basisklasse arbeiten und diese anhand der anderen Klasse erweitern...

Klassenabstraktion
 
Hallo,

ich täte es an deiner Stelle mit Vererbung versuchen, denn genau darin liegt die eigentliche Stärke von OOP. Es ist schlichtweg nicht sinnvoll einfach wahllos Methoden in eine Klasse zu packen, nur um anschließend sagen zu können - "ist objekt orientiert".

Eine Aufpaltung in mehrere Files ist einnerhalb einer Klasse nicht möglich, verschiedene Klassen können (und sollten auch) in verschiedenen Files abgelegt sein.

Viele Grüße
Robert
 
Ich hab's zwar noch nicht probiert, koennte mir aber schon vorstellen, dass man innerhalb von Klassen auch Methoden includen kann. Man sollte aber dann require() statt include() nutzen, damit das Script abgebrochen wird falls dabei was schief geht.
Wie gesagt, hab's noch nicht getestet, daher kann es natuerlich auch sein, dass es garnicht geht. Vielleicht schau ich da nachher mal kurz rein und poste meine Erkentnisse dann hier.
 
Hallo nochmal,

man kann innerhalb von Klassen Methoden weder mittels include, include_once, require noch mit require_once rein laden. Das gibt schlichtweg einen Parse Error.
Nächstes mal bitte erst probieren, dann posten.

Schönes Wochenende
Robert
 
bloddy newbie hat gesagt.:
Nächstes mal bitte erst probieren, dann posten.
Darum hab ich ja extra angegeben, dass ich es noch nicht getestet hab sondern es einfach nur eine Idee ist.

Nachtrag: So, ich hab grad mal fix rumgetestet.
Entgegen der, anscheinend sehr ueberzeugten, Aussage meines Vorredners kann man innerhalb einer Klasse mit require() arbeiten.
Das Problem dabei ist jedoch, dass eingebundene Funktionen nicht als Klassen-Methoden eingebunden werden sondern als ganz normale globale Funktionen.

Mal etwas Beispiel-Code:
class.php
PHP:
<?php
class test
{
	public $var1;
	
	public function __construct()
	{
		require_once('methods.php');
	}
}
?>
methods.php
PHP:
<?php
function x()
{
	echo 'x';
}
?>
classtest1.php
PHP:
<?php
require('class.php');
$x=new test();
$x->x();
unset($x);
?>
Dies gibt einen Fehler, da die Methode test::x() unbekannt ist.
classtest2.php
PHP:
<?php
require('class.php');
$x=new test();
x();
unset($x);
?>
Hierbei gibt es keinen Fehler, sondern die erwartete Ausgabe x.

Dabei ist natuerlich zu beachten, dass die Funktion x() erst zur Verfuegung steht nachdem ein Objekt der Klasse test erstellt wurde, da ja erst in deren Konstruktor die methods.php eingebunden wird.

Also:
bloddy newbie hat gesagt.:
Nächstes mal bitte erst probieren, dann posten.
:D
 
hehe wir können uns jetzt gern trollen, aber es ging um das Implemntieren von zusätzlichen Methoden, nicht aber von zusätzlichen Resourcen (Funktionen oder gar andere Klassen).

In meinen Augen ist das jetzt kein Grund sich hier an die Gurgel zu springen :). Diese Thematik ist übrigens ein Thema der ZEND Prüfung :D.

Viele Grüße
Robert
 
An die Gurgel springen muessen wir uns wirklich nicht.
Ich fand's nur etwas passend Dein Zitat nochmal zurueckzusenden da ich ja praktisch bewiesen habe, dass man ohne Fehlermeldung in einer Klasse mit require() arbeiten kann, nur eben nicht so wie es hier erwuenscht waere.
 
meiner Meinung nach geht noch mehr Methoden irgendwo zu includen gründlich an der doch so schönen Idee von OO und Modularisierung vorbei.

Mach doch eine Datei in der alle ressourcefiles eingebunden werden.

require_once('classname.class.php');
require_once('classname2.class.php');
...

classname.class.inc.php enthält dann

class classname {

}

Sobald du innerhalb der Klasse merkst, dass es zu viele Methoden werden hast du nicht stark genug Modularisiert. Sagen wir mal wir berechnen den Warenkorb eines Webshops. Dann kann man Sachen, die den Preis aus der Datenbank holen und welche, die sich mit Rundungstechniken oder der Mehrwertsteuer beschäftigen gut auslagern und schon sind neben Konstruktoren oder Destruktoren gar nicht mehr so viele Methoden in der Datei.

Auf diese Methoden greifst du dann entweder per Instanz oder - manchmal bei "Hilfsklassen" eh gewünscht als Klassenmethode zu.

Da du am Anfang alles required hast, kannst du ja auf sämtliche Methoden und Klassen zugreifen.

class classname2 {
public static method calulateX() {
}
}

Sehr zu empfehlen ist da die Lektüre über Objektorientierung auf php.net. Es kann sich auch lohnen mal nach fertigen Schnittstellen zu Datenbanken bei PEAR zu suchen ( pear.php.net ). Stichhwort: DataBase Object oder PEAR DB
 
Bluebird hat gesagt.:
meiner Meinung nach geht noch mehr Methoden irgendwo zu includen gründlich an der doch so schönen Idee von OO und Modularisierung vorbei.
Ich find das ganze auch nicht ganz so sinnvoll.
Wenn eine Klasse nunmal viele Methoden hat dann ist das nunmal so. Wenn man eine Klasse selbst geschrieben hat weiss man ja normalerweise welche Methoden darin zu finden sind. So ist dann die Suche im Quelltext auch recht einfach. Methoden auszulagern wuerde dazu fuehren evtl. einen ganzen Haufen Dateien zu haben die alle gepflegt werden wollen, und das kann bei vielen Dateien durchaus umstaendlicher/nerviger/fehleranfaelliger sein als bei lediglich einer Datei.
Und bei vernuenftiger Einrueckung ist auch ein langes Script, oder eben eine Klasse mit vielen Methoden, immer noch gut lesbar und keineswegs unuebersichtlich.
 

Neue Beiträge

Zurück