我第一次尝试使用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();