echo $begrüßung;
* Wenn ich innerhalb einer Klasse weitere andere Klassen benötige (z.B. eine DB-Abstraktions-, Parser- oder CAPTCHA-Klasse in einer Klasse zum Anzeigen und Eintragen von Kommentaren), wie binde ich diese am besten ein?
So geht es zwar...
class A
{
public $something;
function A()
{
require('AnotherClass.php');
$this->something = new AnotherClass();
}
}
>
> ... aber das sieht schon wieder ziemlich nach Spaghetti-Code aus! Das require ist ja, als wäre in function A die Klasse AnotherClass notiert wäre.
Diese Verschachtlung gibt es nach dem Parsen nicht mehr. Klassen und eigenständige Funktionen werden grundsätzlich global angelegt. Sie so zu verschachteln bringt nichts außer Unübersichtlichkeit.
> Und im Hauptprogramm möchte ich die Klasse vielleicht noch nicht pauschal includen, da ich sie nur in ein paar bestimmten Fällen benötige (ja, \_\_autoload() kenne ich, das macht aber doch im Prinzip auch nichts anderes).
Wenn du require und Konsorten (\*\_once wird besser sein, denn du kannst die Klasse ja schließlich an mehreren Orten benötigen wollen.) ohne Bedingung in deinen Quelltext einfügst, wird sie jedes Mal mit geparst. Bei \_\_autoload() erst dann, wenn sie tatsächlich verwendet wird. Da es ohne die SPL nur ein \_\_autoload() geben kann, solltest du darauf in Funktionsbibliotheken, die du unabhängig vom Anwendungsprogramm halten willst, verzichten und das nur dem Anwender für seine eigenen Zwecke überlassen. Ansonsten ist man auf die Abhängigkeit der Benennung einer Klasse zu deren Speicherort abhängig. Zumindest ist das eine gängige Methode, \_\_autoload() plus Ordnung im Dateisystem zu haben.
Allgemein üblich ist es, am Anfang der jeweiligen Datei alle benötigten Referenzen zu inkludieren. Das im Hauptprogramm zu machen ist nicht gerade übersichtlich.
> \* Wie ist es mit globalen Variablen innerhalb von Klassen? Darf man (im Sinne von gutem Programmierstil) innerhalb einer Methode auf $\_POST['sonstwas'] zurückgreifen? Oder wie ist es mit globalen Einstellungen die ich in einem Array habe (z.B. $config['foo'] = 'bar')? Darf ich diese mit "global" einbinden oder sollte ich sie immer als Parameter übergeben?
Das kommt darauf an. Pauschal kann man das nicht beantworten. Soll die Funktion mit beliebigen Daten umgehen können, dann bieten sich Parameter an. Ist sie hingegen auf Teile des HTTP-Requests spezialisiert, dann kann sie direkt darauf zugreifen.
> \* Wenn ich ein paar Grundfunktionen in einer Datei auslagern will, ist es immer sinnvoll, diese in eine Klasse zu packen und so mit Funktionen::meine\_funktion() aufzurufen?
Auch hier gibt es kein klares Ja oder Nein. Natürlich kann man triviale Dinge auch von Klassen ausführen lassen. Du wirst doch sicher die Funktionalität einer bestimmten übergeordneten Einheit zuweisen können. Beispielsweise ist eine Maskier-Funktion für HTML als Methode der Klasse gut aufgehoben, die sich um die Ausgabe kümmert.
echo "$verabschiedung $name";