Ich habe eine Klasse, die weltweit verwendeten Methoden enthält, und sie benutzen, indem die Klasse erweitern:PHP: Wie mehrere Instanzen von erweiterten Klasse verhindern
App.php
final class App extends Core {
// The app class handles routing and basically runs the show
}
core.php
abstract class Core {
public function __construct() { // Here we bring in other classes we use throughout the app
$this->Db = new Db($this);
$this->Mail = new Mail($this);
}
// Then we define multiple methods used throughout the app
public function settings($type) {
// You see this used by the model below
}
}
index.php
$App = new App(); // This fires up the app and allows us to use everything in Core.php
Bis jetzt ist das alles großartig, weil alles auf der gesamten Website von innerhalb $App
gehandhabt wird. In meiner MVC-Struktur müssen die Modelle jedoch Daten aus der Datenbank abrufen und andere Einstellungen abrufen, die alle in Core
enthalten sind. Wir brauchen nicht die gesamte $App
Klasse von den Modellen zu verwenden, aber wir brauchen Core
zu sein.
MyModel.php
class MyModel extends Core {
public function welcome() {
return 'Welcome to '.$this->settings('site_name');
}
}
Sobald MyModel.php
ins Spiel kommt, wird der Core
Konstruktor ein zweites Mal ausführen. Wie kann ich den Core
-Konstruktor davon abhalten, zweimal ausgeführt zu werden?
Dieser Beitrag Antwort überprüfen helfen könnten: http: //stackoverflow.com/questions/23160509/check-whether-instance-of-a-class-exists-if-not-create-an- instance –
Ihre App-Klasse sollte nicht auf die Datenbank zugreifen .. nur die Modelle sollten das tun .. –
Schauen Sie sich auch die Dependency-Injektion an: http://stackoverflow.com/questions/130794/what-is-dependency-injection –