首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony ClassLoader组件示例

Symfony ClassLoader组件示例
EN

Stack Overflow用户
提问于 2012-10-20 20:37:50
回答 2查看 2K关注 0票数 1

我试图建立一个简单的示例,以了解Symfony的ClassLoader组件和新的PSR-0标准是如何工作的。

首先,我创建了Bar.php:

代码语言:javascript
复制
namespace Acme;

class Bar 
{
    // Implementation
    public static function helloWorld() {
        echo "Hello world!";
    }
}

然后我创建了一个autoloader.php (在供应商路径下面有ClassLoader组件):

代码语言:javascript
复制
require_once __DIR__.'/vendor/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php';

use Symfony\Component\ClassLoader\UniversalClassLoader;

$loader = new UniversalClassLoader();
$loader->register();

$loader->registerNamespace('Acme', __DIR__);

最后,我创建了Foo.php:

代码语言:javascript
复制
require_once 'autoloader.php';

use Acme;

class Foo extends Bar
{
    // Implementation
}

$foo = new Foo();
$foo::helloWorld();

但当我执行:

代码语言:javascript
复制
$ php Foo.php

我收到以下错误消息:

PHP警告:在第4行的Foo.php中,非复合名'Acme‘的use语句没有作用。 PHP致命错误:在第7行的Foo.php中找不到类'Bar‘

我在这里做错什么了?

更新

如果我没有使用namespace Acme,而是在Bar.php中使用namespace Acme\Bar,那么我得到的错误消息与上面所示的相同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-23 06:07:55

我发现了出了什么问题。问题是,遵循标准PSR-0的UniversalClassLoader类要求具有名称空间的文件不能位于根目录中,必须在至少一个目录下创建。

这是代码,以防有人想要尝试这个例子。

autoloader.php

代码语言:javascript
复制
require_once __DIR__.'/vendor/Symfony/Component/ClassLoader/UniversalClassLoader.php';
$loader = new Symfony\Component\ClassLoader\UniversalClassLoader();
$loader->registerNamespaces(array('Acme' => __DIR__ . '/src'));
$loader->register();

./src/Acme/Bar.php

代码语言:javascript
复制
namespace Acme;

class Bar 
{
    // Implementation
    public static function helloWorld() {
        echo "Hello world!";
    }
}

./src/Acme/Foo.php

代码语言:javascript
复制
namespace Acme;

require_once '../../autoloader.php';

use Acme\Bar;

class Foo extends Bar
{
    // Implementation
}

$foo = new Foo();
$foo::helloWorld();
票数 1
EN

Stack Overflow用户

发布于 2012-10-20 20:40:53

您不能使用整个命名空间,只能使用tu使用Acme\Bar。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12992448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档