Home  >  Article  >  Backend Development  >  php5 program exception handling_PHP tutorial

php5 program exception handling_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 17:09:27717browse

异常的工作原理:
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().'
';//Rewrite the exception result
}
}
class mydb {
private $user;//username
private $pass;//Password
private $host;//database ip address or localhost
private $db; //database name

//Constructor
public function __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];
//Automatically call the database connection after passing in parameters
$this->connect();
}
}

//Database connection
private function connect (){
//Exception handling
try {
if (!$this->db =@ mysql_connect ($this->host,$this->user,$this->pass)){
$exceptionstring = "Connection failed: Wrong host, username or password";
throw new myException ($exceptionstring,0);//Throw a custom exception object, the parameter is wrong when instantiating the object
}
} catch (myException $e) {
echo $e;
}
}

//Database selection
public function selectdb ($thedb){
try {
if ([email=!@mysql_select_db]!@mysql_select_db[/email] ($thedb, $this->db)){
$exceptionstring = "Database: $thedb does not exist";
throw new myException ($exceptionstring,1);
}
} catch (myException $e) {
echo $e;
}
}

//Execute an update, delete
public function execute ($thequery){
try {
if ([email=!@mysql_query]!@mysql_query[/email] ($thequery, $this->db)){
$exceptionstring = "Wrong sqlstatement: $thequery ";
throw new myException ($exceptionstring,2);
} else {
echo "update/delete affected: " . mysql_affected_rows () . " row
";
}
} catch (myException $e) {
echo $e;
}
}

//Return the narration result
public function getrows ($thequery){
try {
if (!$aquery =@ mysql_query ($thequery)){
$exceptionstring = "Wrong query statement: $thequery ";
throw new myException ($exceptionstring,3);
} else {
while ($adata = mysql_fetch_array ($aquery)){
$returnarr[] =$adata;
}
return $returnarr;
}
} catch (myException $e) {
echo $e;
}
}

//Destructor closes the connection
public function __destruct() {
try {
if ([email=!@mysql_close]!@mysql_close[/email] ($this->db)){
$exceptionstring = "Failed to close connection";
throw new myException ($exceptionstring,4);
}
} catch (myException $e) {
echo $e;
}
}

}
//Instance class
$mydb = new mydb ("localhost","root","123456");
//Select database
$mydb->selectdb ("tonlong");
//Perform update operation
$adata = $mydb->execute ("update db_news set hits=hits+1 where id=3");
//Query output
$data = $mydb->getrows ("select title from db_news");
for ($i = 0; $i < count ($data); $i++){
echo $data[$i][0] ."
";
}
?>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/629750.htmlTechArticleException working principle: try { code handler; if (code processing error occurs) throw new Exception('throw Throw an exception');//Use the throw keyword, followed by an object of Exception//...
Statement:
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