2012-01-28 2 views
0

это моя структура папок PHP/файл: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 

спасибо :)

ответ

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/model/login.class.php

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

Библиотека/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(); 
?> 
1

декларации пространств имен идут в верхней части файла:

<?php 
namespace Foo; 
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); 
     } 
    } 
}); 
+0

я не люблю автопогрузчиков ... другой способ я есть ошибка я использовать пространство имен в первой но тогда я не могу использовать классы CORE, такие как новый DOMDocument и т. д. Неустранимая ошибка: класс LIB \ DOMDocument не найден, как я могу использовать основные классы внутри файла с именами? – ZiTAL

+0

http://stackoverflow.com/questions/6901358/problems-with-php-namespaces-and-built-in-classes-how-to-fix – ZiTAL

Смежные вопросы