自动加载和命名空间php

Ger*_*iel 3 php namespaces autoload

我有这个结构文件:

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

autoload.php
Run Code Online (Sandbox Code Playgroud)

这是我的档案.它们很简单,但我不知道为什么给我错误:

这是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');
Run Code Online (Sandbox Code Playgroud)

我的文件admin/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>
Run Code Online (Sandbox Code Playgroud)

我的类/ 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();
    }

}


}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

 Fatal error: Class 'Classes\Admin\User' not found in /home/germancv/public_html/admin/index.php on line 8
Run Code Online (Sandbox Code Playgroud)

我想我使用的命名空间错了......

Avi*_*viz 5

使用PRS-4 Autoload标准来命名命名空间,这使得自动加载变得非常容易.

在您的情况下为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;
    }
});
Run Code Online (Sandbox Code Playgroud)

如果要使用该类并创建对象

 $user = ProjectName\Admin\User();
Run Code Online (Sandbox Code Playgroud)

要么

use ProjectName\Admin\User as User; 
$user = new User(); 
Run Code Online (Sandbox Code Playgroud)

如果您想要一个类似且简单的组织命名空间的工作示例

看看我在Github中的代码,还可以看到init.php文件