【问题标题】:How to extends multiple classes, in php? [duplicate]如何在 php 中扩展多个类? [复制]
【发布时间】:2012-10-18 16:51:30
【问题描述】:

我想在我的“contactus”页面中创建一个表单。 我正在关注this tutorial。 我必须扩展 sfFrom 类才能使用 sfWidget,但在我的代码中我已经扩展了 BaseController。

是否有任何解决方案可以在不创建新课程的情况下做到这一点?

class InfoController extends BaseController
{
    /**
     *
     * @Route("/contactus", name="info_contactus_page")
     * @Template()
     */
    public function contactusAction()
    {
        return array();
    }
}

【问题讨论】:

  • 我不明白我怎么能做到这一点。在这篇文章中,C 类是在文件顶部创建的,但我的是一个 symfony 类。你能帮帮我吗?
  • @rabudde 一点也不。您是否阅读了完整问题?
  • @Tom-pouce 你在使用 symfony 1 还是 2?因为BaseController 不存在于 symfony1 中,而是存在于 sf2 中。然后,您正在阅读错误的教程..
  • 另外我刚刚注意到,控制器不应该扩展 sfForm。某些操作中的控制器应该创建自定义 sfForm 子对象的实例并使用它。整个问题没有任何意义
  • @j0k 我正在研究 Sf2。我找不到任何 Symfony2 教程来创建表单... =(

标签: php symfony extends


【解决方案1】:

你做错了。

symfony 1 与 Symfony 2完全不同(查看这篇文章:How Symfony2 differs from symfony1)。您按照 sf1 中的教程在 sf2 中创建表单。

您应该尝试寻找 sf2 的资源,例如:

由于你是法国人,我建议你阅读这些教程:

然后,当您阅读完这些教程后,您可以回到这里就您在实现表单时遇到的问题提出一个新问题。

【讨论】:

  • 我没有看到我的教程是针对 sf1 的。 =/感谢您的评论,我一直在寻找解决方案......
【解决方案2】:

使用组合或接口。

在你的情况下,组合就是解决方案。

PHP 不允许多重继承

【讨论】:

  • 什么?我的意思是,如果你有例如 class A { },那么你可以在 class B { public/private/protected $instanceOfA; 中“继承” class A 的行为。 } en.wikipedia.org/wiki/Object_composition
【解决方案3】:

如果可以使用 PHP5.4,请使用特征: http://php.net/manual/en/language.oop5.traits.php

<?php 

trait SomeOtherControllerTrait {
    function SomethingSomethingSomething() { /* Something */ }
}

class InfoController extends BaseController {
    use SomeOtherControllerTrait;
    /* ... */
}

它们允许您通过使用组合获得与多重继承相似的结果。

编辑:由于问题下方的标签更改为 Symfony2: 您不需要多重继承,因为 Symfony2 以不同的方式处理这种情况。接受的答案很好地描述了它。

【讨论】:

  • 我必须实例化一个 sfFrom 对象(在函数 SomethingSomething...中)?
  • 是的,您可以这样做并在 InfoController 中使用它。然而,这不是 Symfony2 的做事方式;)
猜你喜欢
  • 2011-12-07
  • 2015-06-19
  • 2017-10-04
  • 2011-06-11
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
相关资源
最近更新 更多