2016-04-03 81 views
0

这是我第一次以完整的OO风格进行项目。我的课看起来非常混乱。我发现自己在一堆类文件上做了require_once并创建了新的类实例。所以,我把所有的要求和创建实例到一个单独的文件(的init.php)像这样:单独的PHP类初始化文件

<?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); 

?> 

现在我只是在做require_once此文件。

而且我不在几页使用View类。那么,如果我不打算使用它,那么这是不好的做法,并且不利于创建类的实例?

+0

看看“自动加载”。更强大和方便。 – arkascha

+0

你可以从阅读有关[自动加载](http://php.net/manual/en/language.oop5.autoload.php)的精细手册开始......然后如果你遵循该步骤,你会发现很多例子周围。 – YvesLeBorg

回答

3

最好的做法通常是使用autoloader,PHP提供了一个极好的自动加载用于此目的 - SPL自动加载磁带机:http://php.net/manual/en/function.spl-autoload-register.php

您可以创建一个回调,它会自动通过PHP调用时找不到类,在这种回调,你可以要求/包括PHP在哪里会为你的类搜索的文件夹路径,你也可以注册多个自动加载机将在顺序调用它们被定义,下面的例子 -

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'); 

将这个在你的文件的顶部,你叫你的init.php文件和自动加载器将在每次找到需要自动加载的类时调用。