PHP七天系列之异常处理

异常说明


异常是推荐的错误处理方式,传统的错误处理方式要判断并一层一层返回到调用点,如下所示:

len = $len;
        if ($this->line() === false) {
            return false;
        }
    }
    public function line()
{
        if ($this->len > 5) {
            return false;
        }
    }
}
$code = new Code;
if ($code->make(10) === false) {
    echo '验证码创建失败';
}

通过上面代码我们发布处理错误时及其不方便,需要多个判断语句。下面是改用异常的处理方式。

len = $len;
        $this->line();
    }
    public function line()
{
        if ($this->len > 5) {
            throw new Exception('长度不能超过五位');
        }
    }
}
try {
    $code = new Code;
    $code->make(10);
} catch (Exception $e) {
    echo $e->getMessage();
}

基本使用


try/catch

PHP需要手动抛出异常,这与其他语言不同,异常使用try...cache触发。

try{
  ...
}catch(){
  ...
}

try 代码块中对出现的错误可以抛出异常,下面是手动抛出异常的方法。

throw new Exception($message,$code)

catch 用于接收异常,可以设置多个 catch 代码块,参数为 Exception 类或继承于 Exception 的类。

getMessage() . ';code:' . $e->getCode();
} catch (Exception $e) {
    echo $e->getMessage();
} finally {
    echo '无论是否抛出异常都将执行' . ';code:' . $e->getCode();;
}

finally

finally 需要放在 catch 后,finally 无论是否抛出异常都会执行。

...
} catch (Exception $e) {
    echo $e->getMessage();
} finally {
    echo '无论是否抛出异常都将执行';
}
...

异常类


基类方法

PHP为异常处理提供了基础类 ExceptionException 类可用方法如下:

方法 说明 重写
getFile 产生异常错误的文件 NO,final
getCode 错误码 NO,final
getLine 错误行号 NO,final
getMessage 错误消息 NO,final
__toString 对象转字符串后输出内容 YES
getFile();
    }
}
try {
    throw new ValidateException('is exception', 403);
} catch (ValidateException $e) {
    echo "文件:" . $e->getFile() . "
"; echo "消息:" . $e->getMessage() . "
"; echo "错误码:" . $e->getCode() . "
"; echo "错误行:" . $e->getLine() . "
"; echo $e . "
"; }

异常实例

实际开发中需要根据不同业务创建处理错误的异常类,推荐使用异常来处理错误而不是PHP的错误处理机制。

因为代码量比较大,大家请查看视频教程来学习。

自定义异常


下面是通过实例讲解自定义异常的使用方法。

目录结构

app
-- Exceptions
  -- ValidateException.php
  -- ViewException.php
-- Servers
  -- Validate.php
  -- View.php
-- vendor
-- view
  -- error.blade.php
  -- index.blade.php
  -- success.blade.php
bootstrap.php
composer.json
controller.php
index.php

文件内容

app\Exceptions\ValidateException.php

app\Exceptions\ViewException.php

 $this->getMessage()]);
    }
}

app\Servers\Validate.php

app\Servers\View.php

app\view\error.blade.php




    
    
    
    Document


    

app\view\index.blade.php




    

app\view\error.blade.php

操作成功

app\bootstrap.php

render();
        }
    }
}
(new Boot)->init();

composer.json

{
    "name": "hd/app",
    "authors": [
        {
            "name": "pfinalClub.com",
            "email": "[email protected]"
        }
    ],
    "autoload": {
        "psr-4": {
            "App\\": "."
        }
    },
    "require": {}
}

controller.php

render();
// } catch (ViewException $e) {
//     $e->render();
// }

index.php

你可能感兴趣的:(PHP七天系列之异常处理)