php:如何在这个结构中实现命名空间

时间:2012-01-28 13:03:59

标签: php namespaces

这是我的php文件夹/文件结构:

mvc
    controller
        login.class.php
    model
        login.class.php
lib
    login.class.php
core
    controller.class.php
    model.class.php
    core.class.php

core.class.php代码

<?php
class core
{
    public static function load()
    {
        require_once('lib.class.php');
        require_once('controller.class.php');
        require_once('model.class.php');
    }
}
core::load();
?>

我不知道在哪里设置命名空间来执行以下操作:

\LIB\login.class.php
\CONTROLLER\login.class.php
\MODEL\login.class.php
谢谢你:)

3 个答案:

答案 0 :(得分:2)

您必须将命名空间定义为每个文件(namespace my\namespace;)中的第一个语句。当命名空间与文件夹匹配时,您可以使用以下自动加载器自动加载所需的文件:

spl_autoload_register(function ($className) {
    $namespaces = explode('\\', $className);
    if (count($namespaces) > 1) {
        $classPath = APPLICATION_BASE_PATH . implode('/', $namespaces) . '.class.php';
        if (file_exists($classPath)) {
            require_once($classPath);
        }
    }
});

答案 1 :(得分:1)

命名空间声明位于文件的顶部:

<?php
namespace Foo;

答案 2 :(得分:0)

mvc
    controller
        login.class.php
    model
        login.class.php
lib
    login.class.php

index.php

<强> MVC /控制器/ login.class.php

<?php
namespace controller;
require_once('mvc/model/login.class.php');
class login
{
    public function __construct()
    {
        $login = new \model\login();
    }
}
?>

<强> MVC /模型/ login.class.php

<?php
namespace model;
require_once('lib/login.class.php');
class login
{
    public function __construct()
    {
        $login = new \lib\login();
    }
}
?>

<强> LIB / login.class.php

<?php
namespace lib;

class login
{
    public function __construct()
    {
        // core class instance
        $login = new \DOMDocument();
    }    
}
?>

<强>的index.php

<?php
require_once('mvc/controller/login.class.php');

$login = new \controller\login();
?>