如何分解/分组php方法

问题描述 投票:0回答:3

我有一个包含不同方法的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);
} 
php class methods factoring
3个回答
1
投票

您可能想要__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);
    }
}

1
投票

您可以使用变量变量解决此问题:

function Action($controller, $wanted = '') {
    $c = "{$controller}Controller";
    $o = new $c();
    // ...
}

然后您可以使用:

$s = new SuperAdminController();
$s->Action('name1');

Demo on 3v4l.org


0
投票

如下更改代码:

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...
        }
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.