Ich meinte mit Factory eher das:
PHP:
/**
* get the document object
* returns the {@link document} object, only creating it if it doesn't already exist, @see application
*
* @return document object
*/
public static function getDocument ()
{
if (!self::$document)
{
require_once \_wPATH_LIBS_DOCUMENT . \DS . 'document.php';
self::$document = new document ();
}
return self::$document;
}
OT: Zunächst einmal - bitte keine Full-Quotes
Dann etwas zum Thema: Streng genommen ist deine Implementierung ein Singleton. Ob die Methode jetzt getInstance() oder getDocument() heißt, ist völlig belanglos. Singletons geben immer die gleiche Instanz zurück. Factories geben immer neue Instanzen zurück. Bitte in wikipedia nachlesen:
http://de.wikipedia.org/wiki/Fabrikmethode
Insbesondere das Kapitel Abgrenzung und Verwendung lesen.
Das ist auf jeden Fall schon mal etwas aufschlussreicher, wobei ich glaube ich einfach nur einen Denkfehler habe... Die Klasse wurde ja noch nicht erzeugt, wieso wird sie dann ausgeführt? Eine Klasse kann sich also selbst erzeugen? (so im übertragenden Sinne)
Du kannst mittels des statischen Zugriffs auf eine Klasse eine neue Instanz der selben erzeugen lassen. Genau das macht mein Singleton-Beispiel.
Statische Zugriffe auf Klassen benötigen - ja verbieten quasi - die Verwendung einer Instanz. Daher ist der Operator auch ein anderer:
PHP:
class A
{
public static function createStatic()
{
// Mach irgendwas
}
public function doSomethingInstance()
{
// Mach was anderes
}
}
// Statischer Zugriff (ein Objekt ist nicht notwendig)
A::createStatic();
// Instanz-behafteter Zugriff (ein Objekt muss vorher erzeugt werden
$o = new A();
$o->doSomethingInstance();
Auch das protected kam mir schon mal unter... Das hat meines Wissens nach irgendwas mit Klassenvererbung zu tun.
Richtig, protected-Zugriff weicht den private-Zugriff auf. Wenn ich eine Klasse B habe, die von Klasse A erbt, darf die Klasse B die protected-Methoden und -Variablen von A verwenden. Eine Klasse C, die nicht von A oder B erbt, darf nicht auf die protected-Methoden und -Variablen zugreifen.
Was - im Gegensatz zu Smarty - ist das Zend Framework? So eine wirklich 100% klare Aussage darüber, was das Zend Framework überhaupt ist, hab ich auf deren Website nicht entdeckt. Weil das ZF scheint mir doch um einiges umfangreicher zu sein als Smarty.
Das ZF ist ein Rahmenwerk von lose mehr oder weniger von einander abhängigen Komponenten. Einfaches Beispiel:
Klasse Zend_Date: Mit ihr kann man Datumsobjekte erstellen und manipulieren. Natürlich kann man die ganzen Zeit-Funktionen, die PHP so von Haus aus unterstützt (Funktionen aus dem globalen Namensraum wie z.B. strftime() oder mktime()) prozedural verwenden. Zend_Date kapselt diese Funktionen in eine Klasse für die einfache Verwendung.
Klasse Zend_Form: Damit kannst du HTML-Formulare erstellen. Das ist aber ein anderes Konzept, als den HTML-Code selbst zu schreiben. Du erstellst ein neues Objekt aus Zend_Form und hängst da Unterobjekte rein, wie z.B. Zend_Form_Element_Text (ein Input-Feld), Zend_Form_Element_Password (sagt der Name schon) oder Zend_Form_Element_Captcha (ein Form-Element, was ein Captcha darstellen - Captcha ist ein Begriff?). Zusätzlich zu den Elementen kann man Filter und Validatoren an die Elemente hängen, um das Formular nach dem Absenden auf seine Gültigkeit hin zu überprüfen. Also wenn du z.B. in deinem PHP-Code $_POST['form_element'] prüfst, ob da nur Zahlen drin stehen, kann Zend_Form einen Validator Zend_Validate_Int anhängen und damit spart man sich den Code für eine Prüfung.
Zend Framework ist quasi was für faule ;-)
Nein ernsthaft: An einem gewissen Punkt in deiner Programmiererlaufbahn wirst du dir denken: Warum mach ich den gleichen Kram eigentlich immer und immer wieder? Dann ist der Zeitpunkt für ein Framework gekommen. Entweder zu schreibst dir selbst eins (was für den Lern-Effekt sehr cool ist) oder du benutzt ein vorhandenes gepflegtes und stabiles Framework. Es gibt deren mehrere. Zend ist nur eines von vielen. Zu nennen wäre da noch
CakePHP oder
Symfony.
Letzendlich ist es Geschmackssache, welches man verwenden will. Man sollte sich aber irgendwann für eines entscheiden und dieses dann auch in allen Stärken ausnutzen. Dazu muss man es aber kennen und wissen was es kann.