<?php
/****************************************************
* 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 :
* /ekliu/article/details/8855907
*/
// SqlFileObject相对于传统的open($filename, 'r')产生的对象的优点在于不需要打开文件句柄 不需要关闭句柄更加的方便
$handle = new SplFileObject("sid_list.txt");
while (!$handle->eof()) {
$item = $handle->fgets();
}
try {
$pdo = new SplFileObject("", "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 = "<h2>出现异常,如下:</h2>";
$message .= "<p>" . __CLASS__ . "[{$this->code}:{$this->message}]</p>";
return $message;
}
/****************自定义异常方法***************/
public function test()
{
echo "这是自定义错误";
}
public function stop()
{
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 function getDetails()
{
switch ($this->code) {
case 0:
return "没有提供文件";
break;
case 1:
return "文件不存在";
break;
case 2:
return "不是一个文件";
break;
case 3:
return "文件不可写";
break;
case 4:
return "非法文件的操作模式";
break;
}
}
}
class WriteData
{
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 function close()
{
if ($this->_fp) {
if (!fclose($this->_fp)) throw new FileException($this->_message, 6);
$this->_fp = null;
}
}
public function __destruct()
{
$this->close();
}
}