PHP命名空间不起作用



我第一次尝试使用PHP名称空间,甚至无法获得一个使用2个文件的非常基本的示例。这是我的目录设置:

/Framework/
/Framework/index.php
.Framework/Models/TestModel.php

这是两个文件背后的代码。

index.php:

命名空间框架;使用\Framework\Models\TestModel;$model=新的TestModel();$model->test()

TestModel.php:

命名空间框架\模型;类TestModel{公共函数测试(){打印("测试");}}

错误只是找不到TestModel类:

致命错误:在C:\examplep\htdocs\Framework\index.php的第7行中找不到类"Framework\Models\TestModel"正在通过localhost/Framework/index.php上的web浏览器运行php。这一定是我没有看到的非常简单的东西,有人能帮我指出吗?

文件本身的命名空间"区别";来自其他类和函数,但是PHP/Server不知道物理文件仅仅基于Namespace在哪里。

因此,正如人们所提到的,直接包含该文件可以让PHP确切地知道您的意思。

当PHP找不到文件时,它会调用函数spl_autoload_register(),在这种方法中,人们通常会放一个小函数来匹配命名空间和目录结构,然后根据它们加载文件。

另一种选择是在您的项目中包括Composer,并使用PSR-4自动加载

{
"require": {
},
"autoload": {
"psr-4": {
"App\": "app_directoy/",
"Framework\": "framework_directory/",
}
}
}

当包含composer自动加载时,它将在您定义的Framework_directory中查找所有Framework/*。

您应该删除'namespace Framework'将TestModel.php包含在您的index.php中-类似于以下内容:

require_once('Models/TestModel.php');
use FrameworkModelsTestModel;
$model = new TestModel();
$model->test();

最新更新