我有一个包含不同方法的PHP类:
namespace App\Controllers;
class SuperAdminController extends Controller {
public function name1Action($wanted = ''){
$o = new name1Controller();
self::routeWanted($wanted,$o,$this);
}
...
public function name10Action($wanted = ''){
$o = new name10Controller();
self::routeWanted($wanted,$o,$this);
}
private function routeWanted($wanted,$o,$that){
switch($wanted){
do something...
}
}
}
如何将所有公共功能归为一个功能,如
public function name1Action ... name10Action($wanted = ''){
$o = new name1Controller();
self::routeWanted($wanted,$o,$this);
}
您可能想要__call Magic。
class SuperAdminController extends Controller {
public function __call($name, $args){
// list of method names
$mNames = [
'name1Action' => 1,
'name2Action' => 2,
'name3Action' => 3,
/* ... */
];
if (isset($mNames[$name])) {
$o = new {$name}();
return $this->nameAction($args[0], $o);
}
}
protected function nameAction($wanted = '', $o){
self::routeWanted($wanted,$o,$this);
}
}
您可以使用变量变量解决此问题:
function Action($controller, $wanted = '') {
$c = "{$controller}Controller";
$o = new $c();
// ...
}
然后您可以使用:
$s = new SuperAdminController();
$s->Action('name1');
如下更改代码:
namespace App\Controllers;
class SuperAdminController extends Controller {
// public function name1Action($wanted = ''){
// $o = new name1Controller();
// self::routeWanted($wanted,$o,$this);
// }
...
// public function name10Action($wanted = ''){
// $o = new name10Controller();
// self::routeWanted($wanted,$o,$this);
// }
public function beforeRouteWanted($wanted, $number) {
$class = 'name' . $number . 'Controller';
$o = new $class();
self::routeWanted($wanted, $o, $this);
}
private function routeWanted($wanted,$o,$that){
switch($wanted){
do something...
}
}
}