首頁 > 後端開發 > php教程 > 如何优化php代码结构

如何优化php代码结构

WBOY
發布: 2016-06-06 20:40:46
原創
1187 人瀏覽過

每次调用方法后,都需要验证返回值来决定返回还是继续执行,以下代码如何调整会好些?

<code>/**
 * 执行业务逻辑
 * @param $action 执行方法
 * @param $allParams
 * @return array|bool
 */
public static function parseMore($action, $allParams)
{
    // 用户登录请求数据解析
    $inputs = self::userLoginParse($allParams);
    //验证
    if(self::$_errorNo != StatusCode::STATUS_TRUE) return array();
    if($inputs === false) return false;

    // 调用业务方法
    $result = call_user_func(array("Frontier", strtolower($action)), $inputs);
    //验证
    if(self::$_errorNo != StatusCode::STATUS_TRUE) return array();
    if($result === false) return false;

    return array(
        $action => $result
    );
}
</code>
登入後複製
登入後複製

回复内容:

每次调用方法后,都需要验证返回值来决定返回还是继续执行,以下代码如何调整会好些?

<code>/**
 * 执行业务逻辑
 * @param $action 执行方法
 * @param $allParams
 * @return array|bool
 */
public static function parseMore($action, $allParams)
{
    // 用户登录请求数据解析
    $inputs = self::userLoginParse($allParams);
    //验证
    if(self::$_errorNo != StatusCode::STATUS_TRUE) return array();
    if($inputs === false) return false;

    // 调用业务方法
    $result = call_user_func(array("Frontier", strtolower($action)), $inputs);
    //验证
    if(self::$_errorNo != StatusCode::STATUS_TRUE) return array();
    if($result === false) return false;

    return array(
        $action => $result
    );
}
</code>
登入後複製
登入後複製

这个场景下应该使用异常而不是返回值。

包括userLoginParse和那个call_user_func的动态方法,看上去都在用self::$_errorNo传递错误状态,这是连C/C++都不推荐的糟糕模式(全局变量传递错误码)

这段代码或许应该长这样

<code>public static function parseMore($action, $allParams)
{
    try {
        $inputs = self::userLoginParse($allParams);
    } catch(EmptyInputException $e) {
        return array();
    }

    $result = call_user_func(array("Frontier", strtolower($action)), $inputs);

    return array(
        $action => $result
    );
}
</code>
登入後複製

或许应该长这样

<code>public static function parseMore($action, $allParams)
{
    $inputs = self::userLoginParse($allParams);
    if($inputs === null) {
        return array();
    }

    $result = call_user_func(array("Frontier", strtolower($action)), $inputs);

    return array(
        $action => $result
    );
}
</code>
登入後複製

取决于那个return array();的分支和userLoginParse的业务


我通常判断一个函数返回bool是否合理是这样判断的

a)bool和其他类型混合:一定不合理。比如题主这种场景应该用异常,比如查询XXX返回对象/false 应该用null
b)看函数名字,如果不能改叫isXXX,hasXXX等回答是否的疑问句,八成有问题

我会考虑如下2个方法:
1、把检查的地方剥离出来,单独写个方法,用来检查$_errorNo和返回值
2、在调用的方法里,抛出异常而不是return false,然后外面catch住,根据异常的code来判断返回false还是空数组

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板