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)
我想我使用的命名空间错了......
使用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文件