Ich schrieb eine Klasse zu validieren Formulareingabe, die über bestimmte Felder (Schlüssel in der Eingabe-Array) und ermöglicht es, Regeln dafür zu definieren. Dies würde ermöglichen, einen Validierer zu schaffen, der sich um Kontaktdaten kümmert, z. mit Feldern "title"
, "name"
und "email"
.Objekt als (globale) Konstante in PHP
Die Idee meines Entwurfs war, dass dieser Validator für mehrere Formulare wieder verwendet werden könnte, die auf der Website verteilt werden. Schließlich müssen viele dieser Formulare möglicherweise einige Kontaktdaten ausfüllen. Die einzige Sache, an die ich nicht gedacht habe, ist, dass PHP es nicht erlaubt, Konstanten oder statische Felder mit Objekten zu initialisieren.
Ich hatte gehofft, meine Validator zu verwenden, indem es in irgendeiner Datei utils.php
als
const CONTACT_VALID = new Validator(...);
, so dass ich konnte einfach require "utils.php"
spezifizieren diese Konstante zuzugreifen, ohne sie jedes Mal initialisiert wird. Dies funktioniert natürlich nicht und auch bei statischen Variablen funktioniert das nicht. Ich dachte auch über so etwas wie
static CONTACT_VALID = NULL;
static function get_contact_valid() {
if (is_null(CONTACT_VALID))
CONTACT_VALID = new Validator();
return CONTACT_VALID;
}
aber ich bin nicht ganz sicher, ob dies die gewünschte Wirkung haben würde, da ich relativ neu bin auf PHP (und Web-Technologie im Allgemeinen).
Also meine Frage: Gibt es eine Möglichkeit, ein Objekt so zu haben, dass ich es überall auf der Website verwenden kann, ohne es immer wieder neu initialisieren zu müssen?
Nicht sicher wer den Downvote gab - das ist die richtige Antwort. Genau dafür stehen Singletons. Die allgegenwärtige Verwendung eines "konstanten" Objekts (das es nicht wirklich ist) ist eine Datenbankverbindung. Sie möchten keine Verbindung zu Ihrer Datenbank in einem Dutzend verschiedener Klassen herstellen, also behalten Sie einen Singleton, der sich an Ihre DB-Verbindung erinnert. Caching ist ebenfalls üblich. –
Zunächst ist dies nicht das Singleton-Muster, wie es in OOP bekannt ist (für mich ist das immer noch das von der GoF beschriebene). Ich würde das eher eine Instanzklasse oder eine triviale Anwendung des Factory-Musters nennen. Außerdem wird das Singleton-Muster oft als ein [Anti-Muster] (http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons) angesehen. Auch in diesem Fall benötige ich möglicherweise mehrere Validierungsinstanzen (Kontaktinformationen, Fluginformationen, Beschwerden usw.). Zusammengefasst: Das Fabrikmuster könnte zu einer besseren Antwort geführt haben ... –
@JoshfromQaribou Ich bin derjenige, der für die Down-Vote verantwortlich ist. Meine Argumentation kann in meinem vorherigen Kommentar gefunden werden. Außerdem: Sie haben recht, eine Datenbank ist eines der wenigen Beispiele, bei denen Singletons sinnvoll sind. –