php的异常处理?能像java样 向上层抛出异常本层不处理由上层区处理异常吗?类似 于java  函数声明要抛出的异常由调用它的函数来处理 行吗? 
我测试了哈 似乎不可以 不知道哪位能给个解答?

解决方案 »

  1.   

    php的异常处理我也有点模糊,很少看见写PHP的用 try{} catch{}的???
      

  2.   

    听说 也许 或许 可能是 die算是 异常处理吧
    PHP 还真不知道 异常要怎么处理
      

  3.   

    没有java那样函数扔的,只能从函数内部扔
      

  4.   

    不知道你打算实现什么目的,也不知道你是如何测试的
    但我知道援引手册中的例子,变换如下/**
    * 自定义一个异常处理类
    */
    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
      

  5.   

    相信他问的是java里这种写法:public void writeList() throws IOException,
                                   ArrayIndexOutOfBoundsException {
    ...
      

  6.   


    我按照你说的 在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;
    }
    }
      

  7.   

    用php来面向对象 看来真的很悲剧啊