用户
 找回密码
 入住 CI 中国社区
搜索
12
返回列表 发新帖
楼主: andyzu
收起左侧

[HELP] 求助,如何减少if嵌套?

[复制链接]
发表于 2018-10-23 02:04:03 | 显示全部楼层
本帖最后由 dws20057 于 2018-10-23 02:05 编辑
PHP复制代码
<?php
 
function ajax_verify()
{
    try {
        $data['username'] = $this->input->post('username', TRUE);    // 获取的用户名
        $data['password'] = $this->input->post('password', TRUE);     // 获取的密码
        $data['captcha'] = $this->input->post('captcha', TRUE);          // 获取的验证码
        $data['rand_token'] = $this->input->post('csrf_name', TRUE); // 获取的随机token
        // 以下两行在实际代码中是没有的,为了方便各位理解代码,所以写上的
        $data['sess_token'] = $_SESSION['rand_token'];   // 这里是session里的随机token
        $data['sess_captcha'] = $_SESSION['captcha'];    // 这里是session里的验证码
 
        if ($_SESSION['rand_token'] != $data['rand_token']) throw new Exception('非法请求!!!');
 
        unset($_SESSION['rand_token']);    // 清空这个 session token 防止再次使用
 
        if ($_SESSION['captcha'] != $data['captcha']) throw new Exception('验证码不对!!');
 
        $result = $this->memberinfo->get_memberinfo($data['username']);
        // 从数据库里读取这个用户的全部信息
        $verify_result = password_verify($data['password'], $result['password']);     // 判断密码是否正确
        // 如果密码正确
        if (!$verify_result) throw new Exception('密码错误');
 
        $_SESSION['memberid'] = $result['memberid'];
        $_SESSION['username'] = $result['username'];
        $_SESSION['realname'] = $result['realname'];
 
        ajax('可以登录了!!');
 
    } catch (Exception $e) {
        ajax($e->getMessage());
    }
}
 
 
// 创建一个helper文件,写入一个 全局ajax返回的方法,根据自己的需求定制,类似这样:
function ajax($msg)
{
    $response['msg'] = $msg;
    $CI = &get_instance();
    $ouput = $CI->output->set_content_type('application/json', 'utf8')->set_output(json_encode($response));
}
复制代码

楼主可以这样写,省点事。就像hex大神说的一样,throw 一个 Exception是个不错的方案,平常在控制器也用的比较多。
发表于 2018-11-3 14:48:41 | 显示全部楼层
本帖最后由 CuiQG丶 于 2018-11-3 14:50 编辑

我一般是

  1.         do {
  2.        
  3.                 if( 1 !== 1) {
  4.                         $res = 'adadad';
  5.                         break;
  6.                 }

  7.                 if( 2 !== 1) {
  8.                         $res = 'ssasas';
  9.                         break;
  10.                 }

  11.         } while(0);

  12.         return $res;

复制代码
 楼主| 发表于 2018-11-4 23:31:15 | 显示全部楼层

感谢,您的方法我觉得也不错!

本版积分规则