天下无坑

天下无坑


复杂过程的再解构

<p>zphp框架的<strong>控制器类和模型类</strong>有些方法的逻辑过程较为复杂,可把逻辑过程进一步分解到一个类中,使主代码更容易阅读</p> <p><strong> 控制器/模型类文件的规则</strong></p> <blockquote> <ul> <li>命名空间与类文件所在路径一致</li> <li>类名与类文件名一致</li> </ul> </blockquote> <h4>方法一</h4> <pre><code class="language-php">//fileName: users.class.php &lt;?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; } }</code></pre> <h4>方法二</h4> <p><strong>一个PHP文件可以定义多个类</strong> 我们把与文件名相同的类称为<strong><code>主类</code></strong>,如果主类中的公开方法有些逻辑过于复杂,我们可以再定义一个以 &quot;__&quot;开头+方法名的 <strong><code>公开方法解构类</code></strong> 只供该方法调用,把复杂的过程写在这里.让公开方法中的主逻辑更加清晰明白。<strong>在文件内定义,在文件内调用</strong></p> <pre><code class="language-php">//fileName: users.class.php &lt;?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'; } }</code></pre>

页面列表

ITEM_HTML