【问题标题】:How to resolve a namespace on php?如何解析php上的命名空间?
【发布时间】:2012-01-20 14:58:08
【问题描述】:

我正在对 php5 进行第一次测试。更具体地说,我正在尝试使用命名空间,但似乎 php 没有解析命名空间。这是我所做的测试:

文件 1:test.php

<?
namespace \first_test;

class Test  {
    function test_function(){
        print "works";
    }
}
?>

文件 2:use_namespace.php

<?
use \first_test;


$a=new \first_test\Test();
$a->test_function();
?>

我收到一个致命错误: 致命错误:找不到类“first_test\Test” here_the_path_use_namespace.php 在哪里。

任何帮助表示赞赏。

附:两个文件都在同一个目录下,windows上php 5.3.9。

【问题讨论】:

  • 不应该包含该文件吗?
  • @yes123,请阅读下面的评论。在那里我评论了为什么我猜我不必包含该文件。

标签: php namespaces


【解决方案1】:

在声明命名空间时不需要\,只有在从中调用函数时才需要它。

<?php
   namespace first_test;

  // ...
?>

另外,在你的第二个文件中,你需要include test.php,否则它不知道first_test是什么。

【讨论】:

  • 如果你这样做use first_test;,你可以在没有命名空间的情况下实例化你的类:$a = new Test;
  • 嗨@Rocket。正如我所说,这是一个测试。目标是使用使用命名空间的第 3 方库。由于它不起作用,我创建了一个小型测试。据我所知,我没有包含 test.php,使用 use 导入应该就足够了。确实在库上,有几个文件,没有一个包含其他任何人,只声明命名空间并通过 use 关键字导入它们。所以我想可能与不允许检测命名空间的 php 配置有关?我已经检查了 include_path 的值以及包含这些 php 的目录。任何想法?谢谢。
  • @xtarafa:我真的不知道命名空间是如何工作的,这只是我能想到的第一件事。
【解决方案2】:

在第 3 方库中,他们最有可能使用自动加载器,它会自动执行所有必需的包含。所以如果你不想手动写include,添加你自己的自动加载器 http://php.net/manual/en/language.oop5.autoload.php

您的入口点包含自动加载器是一种通用方法,因此所有包含的文件都会自动使用它。可以在https://www.php-fig.org/psr/psr-4/找到此编码标准的描述

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    相关资源
    最近更新 更多