5

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

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

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

索引.php:

    命名空间框架;

    使用 \Framework\Models\TestModel;

    $model = new TestModel();
    $模型->测试();

测试模型.php:

    命名空间框架\模型;

    类测试模型
    {
        公共功能测试()
        {
            打印(“测试”);
        }
    }

错误只是它找不到 TestModel 类:

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

我正在通过 localhost/Framework/index.php 的 Web 浏览器运行 PHP。这一定是我没有看到的非常简单的东西,有人可以为我指出吗?

4

2 回答 2

5

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

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

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

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

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

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

于 2020-11-22T03:01:44.513 回答
0

您应该删除“命名空间框架”并在 index.php 中包含 TestModel.php - 像这样:

require_once('Models/TestModel.php');

use \Framework\Models\TestModel;

$model = new TestModel();
$model->test();
于 2018-06-16T15:02:13.767 回答