Symfony2.如何确保控制器实现某些方法,无论其公共/私有/受保护以及是否有任何参数


Symfony2. How to ensure controller implements some method no matters if its public/private/protected and if it has any arguments?

我想知道我是否可以使控制器实现某些方法,无论该方法是公共的、私有的还是受保护的,以及它是否有任何参数。我只想确保控制器具有指定名称的方法,仅此而已。

例如:

interface SomeInterface {
  function someFunction();
  function someOtherFunction();
}
class SomeController extends SomeBaseController implements SomeInterface {
  //some action
  public function someAction() { ... }
  //an implementation of SomeInterface method
  public function someFunction() { ... }  
  //an implementation of SomeInterface method
  protected function someOtherFunction($someParameter) { ... }
}

我知道用普通的 php 接口不可能做到这一点,但也许在 php 中还有其他方法,或者 symfony2 有一些工具可以做到这一点?

我知道一种方法可以做到这一点,它依赖于PHP中可用的__call()方法:http://www.php.net/manual/en/language.oop5.overloading.php#object.call

__call() is triggered when invoking inaccessible methods in an object context. 

你可以继续创建一个看起来像这样的父类 - 尽管它不是接口,所以如果你在单个域之外需要它,请小心。

class BaseClass{
    public function __call($name, $arguments) {
        $methodsToImplement = array(
            'method1', 'method2', 'method3'
        );
        if (in_array($name, $methodsToImplement)) {
            throw new Exception("Method " . $name . " is not yet implemented.");
        }
    }
}

似乎没有办法做到这一点。所以我将我的问题标记为已解决,但是如果有人知道答案,请告诉我!:)