Php Symfony2。如何确保控制器实现一些方法,不管它的公共/私有/受保护以及是否有任何参数?
我想知道我是否可以让控制器实现一些方法,不管该方法是公共的、私有的还是受保护的,也不管它是否有任何参数。我只想确保,控制器具有指定名称的方法,不再有 例如:Php Symfony2。如何确保控制器实现一些方法,不管它的公共/私有/受保护以及是否有任何参数?,php,symfony,interface,Php,Symfony,Interface,我想知道我是否可以让控制器实现一些方法,不管该方法是公共的、私有的还是受保护的,也不管它是否有任何参数。我只想确保,控制器具有指定名称的方法,不再有 例如: interface SomeInterface { function someFunction(); function someOtherFunction(); } class SomeController extends SomeBaseController implements SomeInterface { //some
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中可用的u call()方法: 您可以继续创建一个类似这样的父类——尽管它不是一个接口,所以如果您需要在单个域之外使用它,请小心
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.");
}
}
}
看来没有办法做到这一点。因此,我将我的问题标记为重新解决,但如果有人知道答案,请告诉我!:) 不幸的是,它不能是一个类,我必须从其他类继承,并且我想要创建的“接口”对于最终的类可能不同(即,一些类必须实现一些方法,另一个类必须实现另一个方法)。虽然你的回答很好,有时可能会有所帮助,但不幸的是,这是对我问题的回答。当然,我的意思不是回答;)
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.");
}
}
}