【问题标题】:PHP - Namespace isn't working properlyPHP - 命名空间无法正常工作
【发布时间】:2017-08-11 13:19:30
【问题描述】:

我在带有 php 5.6.24 的 Windows 7 上使用 xampp。我的 php 命名空间有问题。

我的项目目录如下所示:

-project
 + config
 - Framework
   + database
   + Expection
   test.php
 + src
 index.php

我在 Framework/test.php 中有一个 php 文件,它包含以下代码:

<?php
namespace Framework\Test;
echo " i  Am in test.php class";
class Test{
    public function __construct(){
        echo "I m from test classs ";
    }

    public function test_method(){
        echo " No";
    }
}

在我的根目录中,我有 index.php、composer.json

我的 composer.json 有自动加载对象

  "autoload": {
    "psr-4": {
      "Framework\\": "Framework/"
    },
    "files": [
        "src/Helpers/ArrayHelpers.php"
    ]
  },

在我的 index.php 中,我有以下代码:

<?php
echo "<pre>";

require __DIR__ . '/vendor/autoload.php';
use Framework\Test;
$n      = new Test;
print_r($n);

当我在浏览器上运行index.php 文件时,我得到了响应:

我在 test.php 类中;

致命错误:在中找不到类“Framework\Test” C:\xampp\htdocs\project\index.php 第 12 行

我不知道我做错了什么?我的命名空间错了吗?但我从那个文件中得到回声怎么办?为什么 ?怎么了?我的作曲家文件错了吗?

提前致谢。

【问题讨论】:

  • Class Test in namespace Framework\Test 具有 FQCN Framework\Test\Test
  • @u_mulder 不,它仍然不起作用
  • 尝试$n = new Test\Test(); 或命名空间别名use Framework\Test as Fw; $n = new Fw\Test(); - 让它更明显一点。
  • 不,它仍然不起作用。当我使用 Framework\Test; $n = new Test(); 时,我认为文件正在加载(因为它显示了该文件的回显输出),但它给了我找不到类的错误。我明白为什么??

标签: php namespaces composer-php runtime-error


【解决方案1】:

Test 类的命名空间就是Framework,(因为它也位于 Framework 文件夹中)所以尝试更改 Test.php 如下:

<?php
namespace Framework;
echo " i  Am in test.php class";
class Test{
    public function __construct(){
        echo "I m from test classs ";
    }

    public function test_method(){
        echo " No";
    }
}

希望有帮助

【讨论】:

  • hi @ManpreetSingh 在类文件定义中,namespace 应该反映文件夹组织(所以不要指定类的名称),当你使用类时,你应该描述用use 声明完整的类名定义,希望这能澄清
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多