Rivsen's Blog

这里是我的博客,使用github pages创建。

php的一个类定义先后顺序的问题

今天在玩 symfony 的 event-dispatcher 的时候遇到了个奇怪的问题: 我定义的类无法找到,它继承了Event,可是去掉继承语句却能正常调用。

<?php

namespace
{
    require_once "vendor/autoload.php";
    use Symfony\Component\EventDispatcher\EventDispatcher;
    use Symfony\Component\EventDispatcher\Event;

    $a = new Test\a();
    var_dump($a->getName());
}

namespace Test
{
    use Symfony\Component\EventDispatcher\Event;

    class a extends Event
    {
        public function getName()
        {
            return 'ger';
        }
    }
}

后来在qq群、irc上提问了,然后回复说我应该先定义这个namespace再使用,尤其是在单个文件中。

本来php平时用的时候是可以先调用后定义的,不过貌似php还没做到那么完整。于是我找到了一些有意思的博客,其中一个就是类的继承问题,其实这个类未定义和命名空间无关,而是和类的定义顺序有关,相关链接:点这里

<?php

class A extends B {} class B extends C {} class C {}

上边这段代码会提示类B未找到,但是把B和C的定义顺序调换,就可以正常运行了。

<?php

class A extends B {} class C {} class B extends C {}

上边的博客中给了个php.net上的链接,感兴趣的可以去看看: extends