2015-05-05 4 views
2

У меня есть эта структура файл:Автозагрузка и Пространство имен PHP

Classes 
     Connection.php 
     Admin 
      User.php 
admin 
    index.php 

autoload.php 

Это являются моими файлами. Они очень простые, но до сих пор я не знаю, почему дает мне сообщение об ошибке:

Это autoload.php

/*** class Loader ***/ 
function autoLoader($class){ 

    $ggFileName = str_replace("\\","/",$class); 
    $file = $ggFileName . '.php'; 

    if (file_exists($file)){ 

     include $file; 
     return true; 
    } 

     return false; 
} 

/*** register the loader functions ***/ 
spl_autoload_register('autoLoader'); 

Мой файл администратора/index.php

include_once('../boostrap.php'); 

use \Classes\Admin\User; 

if($_REQUEST['submit'] === 'Login'){ 

     User::login(); 

} 



<strong>Login</strong> 

<form name="login" method="post" > 

    user:<input type="text" name="user" /> <br/> 
    password:<input type="password" name="password" /> <br/> 
    <input type="submit" name="submit" value="Login" /> 

</form> 

Мои классы /Admin/User.php --->

namespace Classes\Admin; 

use \Classes\Connection; 
use PDO; 

class User { 

/** 
* Auth Login user 
* 
*/ 
public static function login(){ 

    try{ 

     echo "try to login"; 

    }catch(\Exception $e){ 

     echo $e->Message(); 
    } 

} 


} 

ошибка я получаю:

Fatal error: Class 'Classes\Admin\User' not found in /home/germancv/public_html/admin/index.php on line 8 

Я думаю, что я использую пространство имен неправильно ...

+0

где вы включили ваш 'autoload.php' –

+0

Попробуйте демпинг из' $ ggFileName', я бы предположил, что он используется как абсолютный путь, т. е. из /. Использование '$ file = __DIR__. $ ggFileName. '.php'; 'может быть то, что вам нужно. –

+0

Ya это имеет смысл !! Я попытаюсь посмотреть, если это так. Спасибо –

ответ

3

Используйте PRS-4 Autoload standard для именования пространств имен, который делает самозарядные очень легко.

В вашем случае для класса USER namespace ProjectName\Classes\Admin

Организация файлов и папок, который соответствует с пространством имен.

Определить путь ROOT_URI

Э.Г. define('ROOT_URI', 'C:\Program Files (x86)\XAMPP\htdocs\')

Сделать автозагрузчика

spl_autoload_register(function ($class) { 
    $file = ROOT_URI. str_replace('\\', '/', $class) .'.php'; 
    if (file_exists($file)) { 
     require $file; 
    } 
}); 

Если вы хотите использовать класс и создать объект

$user = ProjectName\Admin\User(); 

или

use ProjectName\Admin\User as User; 
$user = new User(); 

Если вы хотите такой же простой и рабочий пример для организации Namespaces

Посмотрите на мой код в Github, а также увидеть init.php файл

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