2016-04-03 15 views
0

Dies ist das erste Mal, dass ich ein Projekt im vollständigen OO-Stil mache. Meine Klassen sehen sehr unordentlich aus. Ich fand mich dabei, require_once auf eine Reihe von Klassendateien und neue Instanzen von Klassen zu erstellen. Also habe ich alle erfordern und die Schaffung von Instanzen in eine separate Datei (init.php) wie folgt:Eine separate PHP-Klasseninitialisierungsdatei

<?php 

require_once 'resources/config.php'; 
require_once 'classes/db.php'; 
require_once 'classes/auth.php'; 
require_once 'classes/msg.php'; 
require_once 'classes/validate.php'; 
require_once 'classes/view.php'; 
require_once 'functions/misc.php'; 

//DB connection 
$db = new DB(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
$dbConnection = $db->connect(); 

$msg_class = new Msg(); 
$validate = new Validate($dbConnection); 

$msg_strings[] = array(); 

$view = new View($dbConnection); 

?> 

Jetzt bin ich nur require_once auf diese Datei zu tun.

Und ich verwende die View-Klasse nicht auf ein paar Seiten. Also ist es eine schlechte Übung und nicht gut für die Leistung, Instanzen einer Klasse zu erstellen, wenn ich sie nicht verwende?

+0

Werfen Sie einen Blick auf "auto loading". Viel robuster und bequemer. – arkascha

+0

können Sie beginnen, indem Sie die feine Anleitung über [Autoloading] lesen (http://php.net/manual/en/language.oop5.autoload.php) ... und dann, wenn Sie dieser Spur folgen, finden Sie viele Beispiele um. – YvesLeBorg

Antwort

3

Die beste Vorgehensweise ist in der Regel ein autoloader, PHP bietet eine hervorragende Autoloader für diesen Zweck zu verwenden - SPL Autoloader: http://php.net/manual/en/function.spl-autoload-register.php

Sie können einen Rückruf erstellen, die automatisch von PHP aufgerufen werden, wenn eine Klasse nicht gefunden wird, in diesem Rückruf können Sie/umfassen den Ordnerpfad erfordern, wo PHP für Ihre Klassen suchen, können Sie auch mehrere Autoloader registrieren, die in der Reihenfolge aufgerufen werden, werden sie definiert sind, beispielsweise unter -

function auto_loader($classname) { 
    //search in the classes folder for a class file. 
    include 'classes/' . $classname . '.php'; 
} 

function auto_load_somethingelse($class){ 
    //include here 
} 

//register the autoloaders 
spl_autoload_register('auto_loader'); 
spl_autoload_register('auto_load_somethingelse'); 

dieses bei der Oben in der Datei, in der Sie Ihre angerufen haben Die Datei init.php und der Autoloader werden aufgerufen, wenn eine Klasse gefunden wird, die automatisch geladen werden muss.