<?php
//header("Content-type: text/html; charset=utf-8");
header("Content-type:text/html; charset=utf-8");
//////////////////////////////////////
//@date: 2013-02-21
//异常处理
//PHP5添加了类假似于其它语言的异常处理模块,在PHP代码中所产生的异常可被throw语句抛出并
//catch语句捕获,需要进行异常处理的代码都必须放入到try代码块中
//以便宜捕获可能存在的异常,每一个try到少要有一个与之对应的catch,使用多个catch可以捕获不同的类所产生的异常,当try代码块不再抛出异常或者找不到catch能匹配所抛出的异常时,PHP代码就会跳转到最后一个catch的后面继承执行,当然,PHP允许在catch代码块中再次抛出(throw)异常
// function inverse($x)
// {
// if(!$x){
// throw new Exception("Division by zero.");
// }else
// return 1 / $x;
// }
// try{
// echo inverse(5)."<BR><BR>";
// echo inverse(0);
// }catch(Exception $e){
// echo "info: ", $e->getMessage(),"<BR><BR>";
// }
// echo "Hello world<BR><BR>";
// class myException extends Exception{}
// class Test
// {
// public function testing()
// {
// try{
// try{
// throw new myException("foo!");
// //这个throw抛给下面的catch
// }catch(myException $e){
// throw $e; //这个throw抛给外面一层的catch
// }
// }catch(Exception $e){
// var_dump($e->getMessage());
// }
// }
// }
// $foo = new Test;
// $foo->testing();
//定义一个接口类
// interface IException
// {
// public function getMessage();
// public function getCode();
// public function getFile();
// public function getLine();
// public function getTrace();
// public function getTraceAsString();
// public function __toString();
// public function __construct($message=null, $code=0);
// }
// //定义一个抽象类
// //abstruct
// //implements 从接口中继承
// abstract class CustomException extends Exception implements IException
// {
// protected $message = "Unknown exception";
// private $string;
// protected $code = 0;
// protected $file;
// protected $line;
// protected $trace;
// public function __construct($message = null, $code = 0)
// {
// if(!$message){
// throw new $this("Unknown".get_class($this)); //返回自己的class名称
// }
// parent::__construct($message, $code);
// }
// public function __toString()
// {
// return get_class($this)."'{$this->message}' in {$this->file}({$this->line})\n".$this->getTraceAsString();
// }
// }
// //继承
// class TextException extends CustomException{};
// function exceptionText()
// {
// try{
// throw new TextException();
// }catch(TextException $e){
// echo "TestException ({$e->getMessage()})\n{$e}<BR><BR>";
// }
// catch(Exception $e){
// echo "Exception ({$e->getMessage()})\n{$e}<BR><BR>";
// }
// }
// exceptionText();
// class MyException extends Exception
// {
// }
// class Tester
// {
// public function foobar()
// {
// try{
// $this->helloWorld();
// }catch(MyException $e){
// //throw new Exception("Problem in foober", 0, $e);
// throw new Exception("Problem in foober", 0);
// }
// }
// protected function helloWorld()
// {
// throw new MyException('Problem in helloWorld()');
// }
// }
// $tester = new Tester();
// try
// {
// $tester->foobar();
// }catch(Exception $e)
// {
// echo $e->getTraceAsString();
// echo $e->getMessage();
// }
// $name = "Name";
// try
// {
// try{
// if(preg_match('/[^a-z]/i', $name)){
// throw new Exception("$name 开始字母是从a-z A-Z");
// }
// if(strpos(strtolower($name), 'name') !== FALSE){
// throw new Exception("$name 包含name关键字");
// }
// echo "这个用户有效!";
// }catch(Exception $e){
// //throw new Exception("插入name再次!", 0, $e);
// throw new Exception("插入name再次!", 0);
// }
// }catch(Exception $e)
// {
// // var_dump(get_class_methods($e));
// // array(8) { [0]=> string(11) "__construct" [1]=> string(10) "getMessage" [2]=> string(7) "getCode" [3]=> string(7) "getFile" [4]=> string(7) "getLine" [5]=> string(8) "getTrace" [6]=> string(16) "getTraceAsString" [7]=> string(10) "__toString" }
// //我干,这个也没见过一个方法名叫getPrevious()的方法名啊!
// // if ($e->getPrevious()) //判断是否有前一个异常
// // {
// // echo "前一个异常是:".$e->getPrevious()->getMessage()."<BR>";
// // }
// echo "异常是:".$e->getMessage()."<BR>";
// }
// class DisplayException extends Exception{};
// class FileException extends Exception{};
// class AssessCotrol extends FileException{};
// class IOError extends FileException{};
// try
// {
// if(!is_readable($somefile)){ //判断给定的文件名是否可读
// throw new IOError("文件不可读");
// }
// if(!user_has_access_to_file($someuser, $somefile)){
// throw new AssessCotrol("权限被拒绝!");
// }
// if(!display_file($somefile)){
// throw new DisplayException("无法显示文件");
// }
// }catch(FileException $e){
// echo "File error:".$e->getMessage();
// exit(1);
// }
///////////////////////////////////////////////////
//@date: 2013-02-23
//扩展PHP内置的异常处理类
//自定义一个异常处理类
// class MyException extends Exception
// {
// public function __construct($message, $code = 0)
// {
// parent::__construct($message, $code);
// }
// public function __toString()
// {
// return __CLASS__.":[{$this->code}]:{$this->message}<BR><BR>";
// }
// public function customFunction()
// {
// echo "这种类型的异常是自定义函数!";
// }
// }
// class TestException
// {
// public $var;
// const THROW_NONE = 0;
// const THROW_CUSTOM = 1;
// const THROW_DEFAULT = 2;
// function __construct($avalue = self::THROW_NONE)
// {
// switch($avalue){
// case self::THROW_CUSTOM:
// throw new MyException("叁数为1 ", 5);
// break;
// case self::THROW_DEFAULT:
// throw new Exception("参数为2 ", 6);
// break;
// default:
// //没有异常的情况下,创建一个对象
// $this->var = $avalue;
// break;
// }
// }
// }
// //例子1
// try{
// $o = new TestException(TestException::THROW_CUSTOM);
// }catch(MyException $e){
// echo "引用异常<BR><BR>";
// echo $e->getMessage();
// $e->customFunction();
// }catch(Exception $e){
// echo "被忽略";
// }
// var_dump($o);
// echo "<BR>***********************<BR><BR><BR><BR>";
// try{
// $o = new TestException(TestException::THROW_DEFAULT);
// }catch(MyException $e){
// echo "不能匹配异常的种类,被忽略!<BR><BR>";
// echo $e->getMessage();
// $e->customFunction();
// }catch(Exception $e){
// echo "匹配异常!<BR><BR>";
// echo $e->getMessage();
// }
// var_dump($o);
// echo "<BR>***********************<BR><BR><BR><BR>";
// try{
// $o = new TestException(TestException::THROW_CUSTOM);
// }catch(Exception $e){ //在没有选择的情况下,基类Exception也是可以捕获的
// echo "捕获异常!";
// echo $e->getMessage();
// }
// var_dump($o);
// echo "<BR>***********************<BR><BR><BR><BR>";
// try{
// $o = new TestException(TestException::THROW_DEFAULT);
// }catch(MyException $e){
// echo "应该不能捕获,因为类型不匹配!<BR>";
// //直接提示错误
// echo $e->getMessage();
// }
// try{
// $o = new TestException();
// }catch(Exception $e){
// echo "没有异常!";
// }
// var_dump($o);
// error_reporting(E_ALL-E_NOTTCE);
// class myCustomException extends Exception
// {
// public function __construct($message, $code =0)
// {
// parent::__construct($message, $code);
// }
// public function __toString()
// {
// return "<b style='color:red'>".$this->message."</b>";
// }
// }
// class testException
// {
// public function __construct($x)
// {
// $this->x = $x;
// }
// function see()
// {
// if($this->x ==9){
// throw new myCustomException("i didnt like it");
// }
// }
// }
// $obj = new testException(9);
// try{
// $obj->see();
// }catch(myCustomException $e){
// echo $e;
// }
class TestableException extends Exception
{
private $property;
function __construct($property)
{
$this->protected = $property;
parent::__construct($this->format($property));
}
function format($property)
{
return "I have formatted: ".$property."!!";
}
function getProperty()
{
return $this->property;
}
}
function testSomethingThrowsTestableException()
{
try
{
throw new TestableException('Property');
}catch(TestableException $e){
echo $e->getMessage();
}
}
testSomethingThrowsTestableException();
?>