我想知道我是否可以使控制器实现某些方法,无论该方法是公共的、私有的还是受保护的,以及它是否有任何参数。我只想确保控制器具有指定名称的方法,仅此而已。
例如:
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.");
}
}
}
似乎没有办法做到这一点。所以我将我的问题标记为已解决,但是如果有人知道答案,请告诉我!:)