天下无坑

天下无坑


复杂过程的再解构

zphp框架的控制器类和模型类有些方法的逻辑过程较为复杂,可把逻辑过程进一步分解到一个类中,使主代码更容易阅读

控制器/模型类文件的规则 > - 命名空间与类文件所在路径一致 > - 类名与类文件名一致

方法一

//fileName: users.class.php
<?php
  namespace common\model;
  use ext\db, z\cache;
  class users { //主类,与文件同名
    static function getRbacUser(){
        // 利用闭包把细颗粒代码封装起来
        // subroutine
        $where = function(){
            //...大段逻辑代码
            return 'where 1=1';
        }
        $order = function(){ //retOrder
            //...大段逻辑代码
            return 'order by id';
        }

        // ...主逻辑代码
        $table = "user";
        $data = "{$where()} {$order()} {$table}";
        return $data;
    }
}

方法二

一个PHP文件可以定义多个类 我们把与文件名相同的类称为主类,如果主类中的公开方法有些逻辑过于复杂,我们可以再定义一个以 "__"开头+方法名的 公开方法解构类 只供该方法调用,把复杂的过程写在这里.让公开方法中的主逻辑更加清晰明白。在文件内定义,在文件内调用

//fileName: users.class.php
<?php
  namespace common\model;
  use ext\db, z\cache;
  class users { //主类,与文件同名
    static function getRbacUser(){
        $where = __getRbacUser::retWhere();//从方法解构类中得到处理好的值
        $order = __getRbacUser::retOrder();

        // 主逻辑代码
        $table = "user";
        $data = "{$where} {$order} {$table}";
        return $data;
    }
}

class __getRbacUser { //方法解构类,类名等于主类方法名前面加2个下横线
    static function subWhere(){ //retWhere
        //...大段逻辑代码
        return 'where 1=1';
    }
    static function subOrder(){ //retOrder
        //...大段逻辑代码
        return 'order by id';
    }

}

页面列表

ITEM_HTML