當前位置:首頁 > PHP教程 > php類庫 > 列表

PHP異常處理類BADMETHODCALLEXCEPTION使用方法

發布:smiling 來源: PHP粉絲網  添加日期:2016-08-18 17:42:38 瀏覽: 評論:0 

異常處理我們很少接觸到BADMETHODCALLEXCEPTION類了,那么這個BADMETHODCALLEXCEPTION類如何來使用?具體的步驟php粉絲網小伙伴就為各位介紹一下。

BadMethodCallException是PHP標準庫里的異常處理類,是PHP自帶的,比如在很多框架中可以看見繼承BadMethodCallException類,如Yii2中:

namespace yii\base;

/**
 * InvalidCallException represents an exception caused by calling a method in a wrong way.
 *
 * @author Qiang Xue <[email protected]>
 * @since 2.0
 */
class InvalidCallException extends \BadMethodCallException
{
    /**
     * @return string the user-friendly name of this exception
     */
    public function getName()
    {
        return 'Invalid Call';
    }
}

BadMethodCallException類又是繼承BadFunctionCallException的:

BadMethodCallException extends BadFunctionCallException {

/* 繼承的屬性 */
protected string $message ;
protected int $code ;
protected string $file ;
protected int $line ;
/* 繼承的方法 */
final public string Exception::getMessage ( void )
final public Exception Exception::getPrevious ( void )
final public int Exception::getCode ( void )
final public string Exception::getFile ( void )
final public int Exception::getLine ( void )
final public array Exception::getTrace ( void )
final public string Exception::getTraceAsString ( void )
public string Exception::__toString ( void )
final private void Exception::__clone ( void )
}

用法,在控制中:

public function actionResetPassword($token)
{
    try {
        $model = new ResetPasswordForm($token);
    } catch (InvalidParamException $e) {
        throw new BadRequestHttpException($e->getMessage());
    }
 
    if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) {
        Yii::$app->getSession()->setFlash('success', 'New password was saved.');
 
        return $this->goHome();
    }
 
    return $this->render('resetPassword', [
        'model' => $model,
    ]);
}

用于捕獲異常,當然除了上面介紹的還異常處理類Exception

1、首先php5提供了基本的異常處理類,可直接使用:

  
<?php 
class Exception 
protected $message = 'Unknown exception'; // 異常信息 
protected $code = 0; // 用戶自定義異常代碼 
protected $file; // 發生異常的文件名 
protected $line; // 發生異常的代碼行號 
function __construct($message = null, $code = 0); 
final function getMessage(); // 返回異常信息 
final function getCode(); // 返回異常代碼 
final function getFile(); // 返回發生異常的文件名 
final function getLine(); // 返回發生異常的代碼行號 
final function getTrace(); // backtrace() 數組 
final function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息 
/* 可重載的方法 */ 
function __toString(); // 可輸出的字符串 
?>

簡單的使用如下:(通過異常,拋出錯誤信息) .

try { 
$error = 'my error!'; 
throw new Exception($error) 
} catch (Exception $e) { 
echo $e->getMessage(); 
}

2、我們可以擴展此類,方便我們的使用

class MyException extends Exception 

// 重定義構造器使 message 變為必須被指定的屬性 
public function __construct($message, $code = 0) { 
// 自定義的代碼 
// 確保所有變量都被正確賦值 
parent::__construct($message, $code); 
// 自定義字符串輸出的樣式 
public function __toString() { 
return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; 
public function customFunction() { 
echo "A Custom function for this type of exception\n"; 
}

異常處理的基本思想是代碼在try代碼被調用執行。如果try碼塊出現錯誤,我們可以執行一個拋出異常的處理。某些編程語言,如java,,在特定情況下將自動拋出異常。在php中,異常必須手動拋出。可以使用如下方式拋出一個異常:

Throw new Exception(‘message',code);

Throw 關鍵字將觸發異常處理機制,它是一個語言結構,而不是一個函數,但是必須給它傳遞一個值。它要求一個接受對象。在最簡單的情況下,可以實例化一個內置的Exception類。

最后,在try代碼之后,必須至少給出一個catch代碼塊。可以將多個catch代碼塊與一個try代碼塊進行關聯。如果每個catch代碼塊可以捕獲一個不同類型的異常,可以使用多個catch代碼塊是有意義的。例如,如果想捕獲Exception類的異常,代碼如下 

Catch(Exception $e) 
//handing exception 

Catch代碼捕獲的對象就是導致異常并傳遞給throw語句的對象(被throw 語句拋出)。使用Exception 類的實例,是不錯的選擇。

Exception類提供了如下的內置方法:

Getcode()   —返回傳遞給構造函數的代碼。

GetMessage() —返回傳遞給構造函數的消息。

getFile()     —返回產生異常代碼的文件的路徑

getLine()    —返回產生異常的代碼所在的行。

注意:

當捕獲到一個異常后,try()塊里面的后續代碼將不會繼續執行,而是會嘗試查找匹配的“catch”代碼塊.

當拋出一個異常后,如果不進行catch處理,則會報“Uncaught exception 'Exception'”錯誤 

 <?php 
function test($val){ 
if ($val>100){ 
throw new Exception("提示信息:您輸入的值過大"); 
test(111); 
?>

3.當一個異常拋出后,catch語句塊可以進行處理也可以不處理,以下是我用戶注冊功能的部分代碼:

try{ 

//check forms filled in 
if(!filled_out($_POST)){ 
throw new Exception('你還沒有填寫表單,請回去填寫'); 
//check email address not valid 
if(!check_email($email)){ 
throw new Exception('郵件的格式不正確'); 
//檢查密度的長度是否大于6 
if(strlen($passwd<6)){ 
throw new Exception('密度的長度應該大于6'); 
//檢查兩次密碼是否相等 
if($passwd!=$passwd1){ 
throw new Exception('兩次密碼不一樣,請重新輸入'); 
//檢查用戶名的長度是否正確 
if(strlen($username)>16){ 
throw new Exception('用戶名的長度不符,請重新輸入'); 
} catch(Exception $e){ 
echo $e->getMessage(); //輸出異常信息。 
}

Tags: BADMETHODCALLEXCEPTION

分享到:

广西快3最大遗漏值统计表