当前位置: 首页 > 面试题库 >

如何在自动加载中使用PHP名称空间?

颛孙玉石
2023-03-14
问题内容

当我尝试使用自动加载和命名空间时出现此错误:

致命错误:*第10行的
/usr/local/www/apache22/data/public/php5.3/test.php中 找不到类’Class1’
*

谁能告诉我我在做什么错?

这是我的代码

Class1.php:

<?php

namespace Person\Barnes\David
{
    class Class1
    {
        public function __construct()
        {
            echo __CLASS__;
        }
    }
}

?>

test.php:

<?php

function __autoload($class)
{
    require $class . '.php';
}

use Person\Barnes\David;

$class = new Class1();

?>

问题答案:

Class1不在全局范围内。

请参见下面的工作示例:

<?php

function __autoload($class)
{
    $parts = explode('\\', $class);
    require end($parts) . '.php';
}

use Person\Barnes\David as MyPerson;

$class = new MyPerson\Class1();

编辑(2009-12-14):

为了清楚起见,我使用“ use … as”是为了简化示例。

替代方法如下:

$class = new Person\Barnes\David\Class1();

要么

use Person\Barnes\David\Class1;

// ...

$class = new Class1();


 类似资料:
  • 本文向大家介绍PHP命名空间和自动加载类,包括了PHP命名空间和自动加载类的使用技巧和注意事项,需要的朋友参考一下 PHP的命名空间(namespace)是php5.3之后才有的。这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的。 为什么php中要使用namespace? 假设如果不使用namespace,那么每个类在一个项目中的名字就必须是固定的。因为php在

  • 我正在开发一个使用Monolog的项目,需要Psr/log。当我通过自动加载使用Monolog时,它会抱怨缺少Psr\Log\LoggerInterface。所以我查看作曲家生成的autoload_namespaces.php,我找不到注册的Psr。 这是我的供应商/autoload_namespaces.php的内容 作曲家是否应该为composer.json文件中定义了{autoload}的所

  • 我有点困惑,我应该如何在作曲家中使用psr-4自动加载。假设我有一个这样的文件夹结构: 基本上,在项目根中:composer。json;包含路由器php类的核心文件夹;包含包含用户类的模型文件夹的应用程序文件夹。 路由器类如下所示: Users类如下所示: 所以我可以使用Composer psr-4自动加载程序自动加载这些类,我可以在Composer中这样做。json: 因此,我可以使用这些类而不

  • 问题内容: 这两行之间的主要区别是什么: 和 当我使用第一行时,我得到一个错误:而且我不太确定为什么会收到此错误?第二行似乎已解决了该问题。 问题答案: 如果您使用: 这意味着ArrayObject是在当前名称空间中定义的。您可以在全局名称空间(当前作用域中未定义名称空间)中,或者在与当前作用域相同的名称空间中定义ArrayObject时,使用此语法(示例)。 如果您使用: 这意味着ArrayOb

  • 问题内容: 我在命名空间和语句上遇到了一些麻烦。 我有三个文件:,和。 我正在尝试使用相对路径进行此操作,因此已将其放在所有类中: 在我的圈子课程中,我有以下内容: 如果使用这些语句,我不会出错。如果我尝试以下语句,则会得到: 致命错误:在第8行的/Users/shawn/Documents/work/sites/workspace/shape/Circle.php中找不到类’Shape \ Sh

  • 问题内容: 我有以下格式的xml文档: 我需要使用lxml中的xpath检索所有元素。我的问题是我不知道如何使用空的名称空间。我尝试了以下示例,但没有用。请指教。 我尝试过的各种方法是: 要么 要么 在这一点上,我只是不知道该尝试什么。任何帮助是极大的赞赏。 问题答案: 这样的事情应该起作用: 另请参见http://lxml.de/xpathxslt.html#namespaces-and- pr