php的异常处理?能像java样 向上层抛出异常本层不处理由上层区处理异常吗?类似 于java 函数声明要抛出的异常由调用它的函数来处理 行吗?
我测试了哈 似乎不可以 不知道哪位能给个解答?
我测试了哈 似乎不可以 不知道哪位能给个解答?
解决方案 »
- js传值给html问题
- Fatal error: Uncaught exception 'Exception' with message 'Could not get reply
- move_uploaded_file移动文件后,文件名变成乱码!
- 用substr如何截取到完整的字符串
- FCK编辑器提交有样式的内容,影响整体的显示效果,望高手赐教!
- 请问,如何从DATE型中分出日,月,年
- 取出id的问题
- 关于广告轮播的问题?
- 数据库我进行关闭出错$rsArr4->close();
- 这个正则,^$为什么在中间,表示什么含义
- wordpress博客系统,qTranslate翻译插件链接问题
- 求助个正则表达式 只一行 详细入贴
PHP 还真不知道 异常要怎么处理
但我知道援引手册中的例子,变换如下/**
* 自定义一个异常处理类
*/
class MyException extends Exception
{
// 重定义构造器使 message 变为必须被指定的属性
public function __construct($message, $code = 0) {
// 自定义的代码 // 确保所有变量都被正确赋值
parent::__construct($message, $code);
} // 自定义字符串输出的样式 */
public function __toString() {
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
} public function customFunction() {
echo "这一异常的一个自定义功能\n";
}
}
/**
* 创建一个用于测试异常处理机制的类
*/
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;
}
}
}function foo1($n) {
return new TestException($n);
}function foo($n=0) {
try {
$o = foo1($n);
} catch (MyException $e) { // 捕获异常
echo "引起了我的异常\n", $e;
$e->customFunction();
} catch (Exception $e) { // 被忽略
echo "捕获的默认异常\n", $e;
}
return $o;
}// 执行后续代码
var_dump(foo());
echo "\n\n";var_dump(foo(1));
echo "\n\n";var_dump(foo(2));
echo "\n\n";可以得到如下输出object(TestException)#1 (1) {
["var"]=>
int(0)
}
引起了我的异常
MyException: [5]: 1 是一个无效的参数
这一异常的一个自定义功能
NULL
捕获的默认异常
exception 'Exception' with message '2 作为一个参数,是不允许的' in D:\AMP\web\ide_tmp.php:48
Stack trace:
#0 D:\AMP\web\ide_tmp.php(60): TestException->__construct(2)
#1 D:\AMP\web\ide_tmp.php(65): foo1(2)
#2 D:\AMP\web\ide_tmp.php(82): foo(2)
#3 {main}NULL
ArrayIndexOutOfBoundsException {
...
我按照你说的 在ci框架下 做的测试 结果什么都没输出 /**
* 自定义一个异常处理类
*/
class MyException extends Exception
{
// 重定义构造器使 message 变为必须被指定的属性
public function __construct($message, $code = 0) {
// 自定义的代码 // 确保所有变量都被正确赋值
parent::__construct($message, $code);
} // 自定义字符串输出的样式 */
public function __toString() {
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
} public function customFunction() {
echo "这一异常的一个自定义功能\n";
}
}
/**
* 创建一个用于测试异常处理机制的类
*/
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;
}
}
}class test_xm extends CI_Controller{
// public function userInfo()
// {
// $uid= 12325;
// $User = new UserBus();
// $User->GetUserInfo($uid);
// echo json_encode($uid);
// }
public function foo1($n) {
return new TestException($n);
} public function foo($n=0) {
try {
$o = $this->foo1($n);
} catch (MyException $e) { // 捕获异常
echo "引起了我的异常\n", $e;
$e->customFunction();
} catch (Exception $e) { // 被忽略
echo "捕获的默认异常\n", $e;
}
return $o;
}
}