PHP:捕获异常

面向过程的代码生成“错误”,面向对象的代码生成“异常”。在面向过程中使用条件判断来处理错误,在面向对象中则使用try和catch语句来处理异常。在try块中,一旦有异常抛出,其后的代码都不会执行。反之,如果没有抛出异常,catch块中的代码永远不执行。

接下来以向文件写入数据作示例:

class WriteToFile {
	private $_fp = NULL;

	function __construct($file) {
		if (!file_exists($file) || !is_file($file)) {
			throw new Exception('文件不存在!');
		}

		if (!$this->_fp = @fopen($file, 'w')) {
			throw new Exception('无法以‘写’方式打开文件!');
		}
	}

	function write($data) {
		if (@!fwrite($this->_fp, $data."\n")) {
			throw new Exception('无法写入文件');
		}
	}

	function close() {
		if ($this->_fp) {
			fclose($this->_fp);
			$this->_fp = NULL;
		}
	}

	function __destruct() {
		self::close();
		echo '析构函数被调用';
	}
}

类WriteToFile的构造函数首先检查文件是否存在且可写,然后以写方式打开文件。

使用这个类(先在创建data.txt文件夹,否则抛出异常:文件不存在):

try {
	$fp = new WriteToFile('data.txt');

	$fp->write('写入1行数据');
}
catch (Exception $e) {
	echo 'Catch到异常:'.$e->getMessage();

}
查看新建的data.txt文件:


注:Exception类的构造函数可以有0到2个参数。第一个参数是错误信息,第二个参数是错误码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值