PHP命名空间不工作

ny6fqffe  于 5个月前  发布在  PHP
关注(0)|答案(3)|浏览(72)

我第一次尝试使用PHP命名空间,甚至不能得到一个使用2个文件的非常基本的示例。下面是我的目录设置:
/框架/
/Framework/index.php
/Framework/Models/TestModel.php
下面是这两个文件背后的代码。
index.php:

namespace Framework;

    use \Framework\Models\TestModel;

    $model = new TestModel();
    $model->test();

字符串
TestModel.php:

namespace Framework\Models;

    class TestModel
    {
        public function test()
        {
            print("test");
        }
    }


错误仅仅是找不到TestModel类:
错误信息:无法找到“Framework\Models\TestModel”错误信息:无法找到“Framework\Models\TestModel”
我正在通过localhost/Framework/index.php的Web浏览器运行PHP。它一定是我没有看到的非常简单的东西,有人能为我指出吗?

v2g6jxz6

v2g6jxz61#

文件本身的存储空间与其他类和函数“区别开来”,但是PHP/Server并不知道物理文件在哪里,只是基于存储空间。
因此,正如人们所提到的,直接包含该文件可以让PHP确切地知道您的意思。
当PHP找不到文件时,它将调用函数spl_autoload_register(),在该方法中,人们通常会放置一个小函数来匹配命名空间和目录结构,然后加载文件。
另一种选择是在项目中包含Composer并使用PSR-4自动加载

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

字符串
当包含composer autoload时,它将按照您的定义在framework_directory中查找所有Framework/*。

yi0zb3m4

yi0zb3m42#

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

require_once('Models/TestModel.php');

use \Framework\Models\TestModel;

$model = new TestModel();
$model->test();

字符串

gstyhher

gstyhher3#

对于命名空间,一般来说,当你想创建具有相同名称的类并包含在文件中并避免致命错误时,它会被使用。我认为根据问题,作者想使用命名空间,所以所需的解决方案是

require_once('Models/TestModel.php');

   use \Framework\Models as test;

   $model = new test\TestModel();
   $model->test();

字符串

相关问题