* php处理异常
* try中不主动throw,会先出现PHP的系统错误
****************************************************/
header("content-type:test/html:charset=utf-8");error_reporting(-1);try{$num1 = 3;$num2 = 0;if ($num2 == 0) {throw new Exception("自定义错误");
}else{$res = $num1 / $num2;
}
}catch (Exception $e) {echo $e->getMessage();//die(); // 终止异常
}/******************************************************
* php+mysql+pdo
*****************************************************/
try{$pdo = new PDO("mysql:host=localhost;dbname=mysql", "root", "");
}catch (PDOException $e) {echo $e->getMessage();//die(); // 终止异常
}/******************************************************
* php+文件异常
*****************************************************/
/**
* PHP 读取大文件 SplFileObject :
* https://blog.csdn.net/ekliu/article/details/8855907*/
//SqlFileObject相对于传统的open($filename, 'r')产生的对象的优点在于不需要打开文件句柄 不需要关闭句柄更加的方便
$handle = new SplFileObject("sid_list.txt");while (!$handle->eof()) {$item = $handle->fgets();
}try{$pdo = new SplFileObject("text.txt", "r");echo "read File";
}catch (Exception $e) {echo $e->getMessage();//die(); // 终止异常
}/******************************************************
* php异常 嵌套
*****************************************************/
try{throw new Exception("测试异常1");
}catch (Exception $e) {echo $e->getMessage();//die(); // 终止异常
try{throw new Exception("测试异常2");
}catch (Exception $e) {echo $e->getMessage();
}
}/******************************************************
* php异常 自定义异常封装
*****************************************************/
class MyException extends Exception{public function __construct($message = "", $code = 0, $previous = null)
{
parent::__construct($message, $code, $previous);
}public function__toString()
{$message = "
出现异常,如下:
";$message .= "" . __CLASS__ . "[{$this->code}:{$this->message}]
";return $message;}/****************自定义异常方法***************/
public functiontest()
{echo "这是自定义错误";
}public functionstop()
{exit("异常 end...");
}
}//开始调用 MyException
try{echo "出现异常啦";throw new MyException("测试自定义异常", 3);
}catch (MyException $e) {echo $e->getMessage();
}//嵌套使用 MyException 与 Exception (没有顺序)
try{throw new MyException("测试自定义异常");
}catch (Exception $e) {echo $e->getMessage();
}catch (MyException $e) {echo $e->getMessage();
}/******************************************************
* php异常 自定义异常封装 文件
*****************************************************/
class FileException extends Exception{public functiongetDetails()
{switch ($this->code) {case 0:
return "没有提供文件";break;case 1:
return "文件不存在";break;case 2:
return "不是一个文件";break;case 3:
return "文件不可写";break;case 4:
return "非法文件的操作模式";break;
}
}
}classWriteData
{private $_message = "";private $_fp = null;public function __construct($filename = null, $mode = "w")
{$this->_message = "文件:{$filename} ; 模式:{$mode}";if (empty($filename)) throw new FileException($this->_message, 0);if (!file_exists($filename)) throw new FileException($this->_message, 1);if (!is_file($filename)) throw new FileException($this->_message, 2);//is_writable — 判断给定的文件名是否可写
if (!is_writable($filename)) throw new FileException($this->_message, 3);if (!in_array($mode, array("w", "w+", "a", "a
+"))) throw new FileException($this->_message, 4);$this->_fp = fopen($filename, $mode);
}public function write($data)
{if (@!fwrite($this->_fp, $data . PHP_EOL)) throw new FileException($this->_message, 5);
}public functionclose()
{if ($this->_fp) {if (!fclose($this->_fp)) throw new FileException($this->_message, 6);$this->_fp = null;
}
}public function__destruct()
{$this->close();
}
}