Home > Backend Development > PHP Tutorial > 如何优化php代码结构

如何优化php代码结构

WBOY
Release: 2016-06-06 20:40:46
Original
1189 people have browsed it

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

<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>
Copy after login
Copy after login

回复内容:

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

<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>
Copy after login
Copy after login

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

包括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>
Copy after login

或许应该长这样

<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>
Copy after login

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


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

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

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

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template