复杂过程的再解构
<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
<?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>,如果主类中的公开方法有些逻辑过于复杂,我们可以再定义一个以 "__"开头+方法名的 <strong><code>公开方法解构类</code></strong> 只供该方法调用,把复杂的过程写在这里.让公开方法中的主逻辑更加清晰明白。<strong>在文件内定义,在文件内调用</strong></p>
<pre><code class="language-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';
}
}</code></pre>