ホームページ  >  記事  >  バックエンド開発  >  php5 プログラムの例外処理_PHP チュートリアル

php5 プログラムの例外処理_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:09:27715ブラウズ

异常的工作原理:
try
{
代码处理程序;
if(代码处理发生错误)throw new Exception('抛出一个异常');//使用throw关键字,后面是Exception的一个对象
//需要说明的是php5异常不会自动抛出异常
//抛出异常后下面处理程序不再执行
代码处理程序;
}
catch Exception $e
{
处理异常;
//如:echo 'Exception '.$e->getCode().':'.$e->getMessage().'in'.$e->getFile().'on line'.$e->getLine();
}

看看抛出的异常类系统是如何定义的
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();
final function getTraceAsString();//与getTrace()一样,只不过它将格式化为字符串

function __toString();//需要对象的字符串表示时会自动调用这个方法,也就是一旦有echo或print直接输出Exception实例时就会被调用
}

Exception的属性不能在调用代码中直接访问,而必须使用获取方法获得其属性值,只用$message,$code能有用户抛出异常时设置,即给Exception类的构造函数完成。由Exception类可以看出我们完全可以继承Exception类创建我们自己的异常类,在检测错误时不再抛出系统默认的异常对象,而是我们自定义的异常类对象,但我们只能继承构造函数、toString()方法和Exception的属性。

class myException extends Exception
{
function __toString()
{
return '

Exception '.$this->getCode().':'.$this->getMessage().'in'.$this->getFile().'on line'.$this->getLine().'
';//改写抛出异常结果
}
}

在代码中调用我们自定义的异常类
try
{
throw new myException('错误',10);//为了简单,直接抛出自定义异常对象
}
catch(myException $e)
{
echo $e;//由于我们的自定义异常已经改变了输出方式,所以这里直接输入异常对象即可,原因为一旦有echo或print直接输出Exception实例时就会被调用__toString()
}

以上单间的介绍了异常,下面我们把异常引入我们的数据库处理类中看看如何使用
class myException extends Exception{
function __construct($message=null,$code=0)
{
parent::__construct($message,$code);
}
function __toString()
{
return '
Exception '.$this->getCode().':'.$this->getMessage().'in File:'.$this->getFile().' on line:'.$this->getLine().'
';//例外結果をスローするように書き直す
}
}
クラス mydb {
private $user;//ユーザー名
private $pass;//パスワード
private $host;//データベース IP アドレスまたはローカルホスト
private $db; //データベース名

//コンストラクター
パブリック関数 __construct(){
$num_args = func_num_args();

if($num_args > 0){
$args = func_get_args();
$this->host = $args[0];
$this->user = $args[1];
$this->pass = $args[2];
//パラメータを渡した後、データベース接続を自動的に呼び出します
$this->connect();
}
}

//データベース接続
プライベート関数 connect(){
//例外処理
試してみてください{
if (!$this->db =@ mysql_connect ($this->host,$this->user,$this->pass)){
$Exceptionstring = "接続に失敗しました: ホスト、ユーザー名、またはパスワードが間違っています";
throw new myException ($Exceptionstring,0);// カスタム例外オブジェクトをスローします。オブジェクトのインスタンス化時のパラメーターが間違っています
}
} catch (myException $e) {
エコー $e;
}
}

//データベースの選択
パブリック関数 selectdb ($thedb){
試してみてください{
if ([email=!@mysql_select_db]!@mysql_select_db[/email] ($thedb, $this->db)){
$Exceptionstring = "データベース: $thedb が存在しません";
throw new myException ($Exceptionstring,1);
}
} catch (myException $e) {
エコー $e;
}
}

//更新、削除を実行
パブリック関数の実行 ($thequery){
試してみてください{
if ([email=!@mysql_query]!@mysql_query[/email] ($thequery, $this->db)){
$Exceptionstring = "間違った SQLステートメント: $thequery ";
新しい myException ($Exceptionstring,2) をスローします;
} その他 {
echo "影響を受ける更新/削除: " . mysql_affected_rows () " ;
}
} catch (myException $e) {
エコー $e;
}
}

//ナレーション結果を返します
パブリック関数 getrows ($thequery){
試してみてください{
if (!$aquery =@ mysql_query ($thequery)){
$Exceptionstring = "間違ったクエリ ステートメント: $thequery ";
新しい myException ($Exceptionstring,3) をスローします;
} その他 {
while ($adata = mysql_fetch_array ($aquery)){
$returnarr[] =$adata;
}
$returnarr を返します;
}
} catch (myException $e) {
エコー $e;
}
}

// デストラクターは接続を閉じます
パブリック関数 __destruct() {
試してみてください{
if ([email=!@mysql_close]!@mysql_close[/email] ($this->db)){
$Exceptionstring = "接続を閉じることができませんでした";
新しい myException ($Exceptionstring,4) をスローします;
}
} catch (myException $e) {
エコー $e;
}
}

}
//インスタンスクラス
$mydb = 新しい mydb ("localhost","root","123456");
//データベースを選択
$mydb->selectdb ("tonlong");
//更新操作を実行します
$adata = $mydb->execute ("update db_news set hits=hits+1 where id=3");
//クエリ出力
$data = $mydb->getrows ("db_news からタイトルを選択");
for ($i = 0; $i echo $data[$i][0] ."
";
}
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/629750.html技術記事例外の仕組み: try { code handler; if (コード処理でエラーが発生した場合) throw new Exception ('例外をスローする') // Exception のオブジェクトを使用します //...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。