PHP命名空间不起作用

时间:2012-09-24 22:26:44

标签: php namespaces

我第一次尝试使用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类:

    致命错误:第7行的C:\ xampp \ htdocs \ Framework \ index.php中找不到类'Framework \ Models \ TestModel'

我通过localhost / Framework / index.php上的Web浏览器运行PHP。它必须是非常简单的东西,我没有看到,有人能指出它吗?

2 个答案:

答案 0 :(得分:1)

文件本身的命名空间与其他类和函数“有区别”,但是PHP / Server不知道物理文件仅基于命名空间的位置。

因此,正如人们提到的那样,直接包含文件可以使PHP确切了解您的意思。

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

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

theMainList

包括作曲家自动加载功能时,它将在您定义的framework_directory中查找所有Framework/*。

答案 1 :(得分:0)

你应该删除'namespace Framework'包含TestModel.php ,而不是你的index.php - 像这样:

require_once('Models/TestModel.php');

use \Framework\Models\TestModel;

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