0

我想知道我是否可以让控制器实现一些方法,无论该方法是publicprivate还是protected以及它是否有任何参数。我只想确保该控制器具有指定名称的方法,仅此而已。

例如:

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 有一些工具可以做到这一点?

4

2 回答 2

0

我知道一种方法可以做到这一点,它依赖于 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.");
        }
    }
}
于 2013-10-16T13:44:59.540 回答
0

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

于 2013-11-07T15:01:52.977 回答