Das Dilemma, innerhalb einer Klasse auf globale Variablen zuzugreifen, ist eine häufige Herausforderung bei der objektorientierten Programmierung Programmierung. Dieser Artikel befasst sich speziell mit dem Problem in PHP und bietet alternative Lösungen für den Fehler „Call to a member function query() on a non-object“.
Im bereitgestellten Codeausschnitt , entsteht der schwerwiegende Fehler durch den Versuch, die Methode query() für die Variable $db innerhalb der Methode get_records() der Klasse pagi aufzurufen. Die Hauptursache ist das Fehlen einer etablierten Verbindung zwischen der Klasse und dem globalen $db-Objekt.
1. Abhängigkeitsinjektion
Abhängigkeitsinjektion ist ein Entwurfsmuster, bei dem die erforderlichen Objekte als Parameter an die Klasse übergeben werden. In diesem Fall würde das Datenbankverbindungsobjekt (d. h. $db) in den Konstruktor der Pagi-Klasse eingefügt. Diese Methode stellt sicher, dass die Klasse Zugriff auf die globale Variable hat, ohne auf den globalen Bereich zurückzugreifen.
2. Methodenparameterinjektion
Alternativ kann das Datenbankverbindungsobjekt als Parameter an die Methode get_records() selbst übergeben werden. Obwohl diese Methode nicht unbedingt die Kapselung verbessert, ermöglicht sie eine größere Flexibilität bei der Verwaltung von Abhängigkeiten.
1. Lose Kopplung:
Abhängigkeitsinjektion fördert die lose Kopplung zwischen Klassen und macht es einfacher, Abhängigkeiten nach Bedarf auszutauschen. In diesem Szenario wäre es einfach, zu einer anderen Datenbankverbindung zu wechseln, ohne den Code der Pagi-Klasse zu ändern.
2. Unit-Tests:
Durch die Weitergabe von Abhängigkeiten über Parameter können Unit-Tests effizienter durchgeführt werden. Anstatt mehrere Klassen gleichzeitig zu testen, wird nur die spezifische Einheit (in diesem Fall die Pagi-Klasse) getestet.
Sowohl die Abhängigkeitsinjektion als auch die Methodenparameterinjektion bieten praktikable Lösungen für den Zugriff auf globale Variablen innerhalb einer Klasse. Die Wahl zwischen den beiden Ansätzen hängt von den spezifischen Designanforderungen der Anwendung ab. Letztendlich zielen beide Methoden darauf ab, die Kapselung aufrechtzuerhalten und gleichzeitig Zugriff auf notwendige externe Ressourcen zu ermöglichen.
Das obige ist der detaillierte Inhalt vonWie kann ich fehlerfrei auf globale Variablen innerhalb einer PHP-Klasse zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!