Symfony2,在相同的命名空间但不同的文件中继承

时间:2014-06-20 22:13:37

标签: symfony inheritance namespaces

一周以来,我爱上了Symfony2。我有一个反馈消息包:src/Erwine/FeedBackMessageBundle

我在另一个项目中添加了一些自定义类:src/Erwine/FeedBackMessageBundle/FeedBackMessage

所有类都具有相同的命名空间:Erwine\FeedBackMessageBundle\FeedBackMessage

我在不同的文件中有几个实现。让我们说:
- FeedBackMessageClassOne
- FeedBackMessageClassTwo
- FeedBackMessageClassThree

第一个人在他自己的文件中存在 。如果Two从One延伸,我就失败了。我已经尝试了use...等等。

两个和三个人在同一个档案中作为双胞胎生活。如果Three继承自Two,那就有效 控制器中One的实例没问题。

在我看来,不同文件中同一命名空间中的类的继承并不起作用。不,不,不,当然不是,我做错了什么。不是吗?但是什么?是否在Symfony2中自动加载自定义类?

我正在使用composer作为依赖项。

更新
这是我的实施:

<?php  

namespace Erwine\FeedBackMessageBundle\FeedBackMessage;

class FeedBackMessageHandlerImpl extends FeedBackMessageHandlerImplTwee
{
    public function __construct() 
    {
        //var_dump('constructed');
        //parent::__construct();
    }

    //public function getFeedBackMessageGeneralOverride(){};
}

1 个答案:

答案 0 :(得分:0)

如果你的自动加载设置正确,它应该是这样的:

文件夹结构:

src/
    Erwine/
        FeedBackMessageBundle/
            FeedBackMessage/
                FeedBackMessageClassOne.php
                FeedBackMessageClassTwo.php
                FeedBackMessageClassThree.php

<强> FeedBackMessageClassOne.php:

<?php

namespace Erwine\FeedBackMessageBundle\FeedBackMessage;

class FeedBackMessageClassOne 
{
    // Contents of class...
}

<强> FeedBackMessageClassTwo.php:

<?php

namespace Erwine\FeedBackMessageBundle\FeedBackMessage;

class FeedBackMessageClassTwo extends FeedBackMessageClassOne 
{
    // Contents of class...
}

由于文件位于同一名称空间中,因此第二个文件中的扩展不需要use语句,因此通过在第二个类中定义相同的名称空间,您可以使用第一类没有使用声明。

确保您的自动加载设置正确。

将每个班级保存在一个单独的文件中,以及您将文件命名为与班级相同的文件,这一点非常重要。

这是因为如果您正在使用composer自动加载器,Symfony默认使用PSR-0。 Go here to read more about PSR-0