如果需要/包含多个文件,它们是否都是同一命名空间的一部分?

时间:2012-03-30 06:51:55

标签: php namespaces

我是php-spanking-php中名称空间概念的新手。

情况: 文件夹中的多个文件,它们都需要/包含彼此用于自己的目的。

如果我将它们全部放在同一个命名空间中,是否仍然需要让它们相互要求/包含?

我确实想过用“use”替换require / include,但是在命名空间foo \ bar中有一个文件实际上'使用'foo \ bar ...似乎很奇怪... o_O

PS: 我通过提问来覆盖我的所有基础,同时也在网上寻找答案;所以,如果您有任何信息/教程等的良好来源,请随时分享。 :d

谢谢你, 大卫

3 个答案:

答案 0 :(得分:2)

所有包含/要求可能会变得混乱。一个包含文件中包含的文件也将包含在第一个文件中,并显式调用它。我建议,如果你使用的是OOP方法,那就开始使用__autoload()魔法。当您在页面上包含文件时,这将为您节省大量的麻烦,该页面已经包含在该页面上运行的其他位置,并且因此而导致500服务器错误。

答案 1 :(得分:1)

是的,您必须要求它们,或者您可以使用psr-0 compatible autoloader

答案 2 :(得分:1)

  

如果我将它们全部放在同一个命名空间中,是否仍然需要让它们相互要求/包含?

例如,您可以创建一个加载器类(这是我一直以来所做的,因此您只需要包含/要求它们一次,并且您只需要在控制器中包含/要求加载器类)。这是我正在使用的当前版本:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

//include alle classes
include("classes/db.class.php");
include("classes/gastenboek.class.php");
include("classes/gebruiker.class.php");
include("classes/bericht.class.php");

session_start();

$db = new Db();

//require smarty (smarty template engine)
require('plugins/smarty/Smarty.class.php');

$smarty = new Smarty;
$smarty->setCompileDir('smarty_compile');
$smarty->setTemplateDir('templates');

//func to dump var
function dump($var)
{
    //echo ##
    echo '<pre>##';
    //print var
    print_r($var);
    //echo ##
    echo '##</pre>';
}

以db.class为例:

<?php
class Db
{
    //Loading Db
    public function __construct()
    {
        //do connect()
        $this->connect();
    }

    //connecting and selecting db
    private function connect()
    {
        $connection = mysql_connect('localhost', 'user', 'pw');

        if(!$connection)
        {
            die("Kan geen verbinding maken: " . mysql_error());
        }

        mysql_select_db("db", $connection);
    }

    public function DBH()
    {
        try 
        {
            $DBH = new PDO('mysql:host=localhost;dbname=dbname', 'user', 'pw');
            $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            return $DBH;
        }

        catch (PDOException $except)
        {
            echo $except->getMessage();
        }
    }

index.php只需要这个:

include("includes/loader.php");