Jelajahi Sumber

ZF-8984: move version-specific Exception functionality into class methods

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@20978 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 16 tahun lalu
induk
melakukan
9e6523e0de
1 mengubah file dengan 56 tambahan dan 52 penghapusan
  1. 56 52
      library/Zend/Exception.php

+ 56 - 52
library/Zend/Exception.php

@@ -19,74 +19,78 @@
  * @version    $Id$
  */
 
-if (version_compare(PHP_VERSION, '5.3.0', '<')) {
+/**
+* @category   Zend
+* @package    Zend
+* @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+* @license    http://framework.zend.com/license/new-bsd     New BSD License
+*/
+class Zend_Exception extends Exception
+{
     /**
-     * @category   Zend
-     * @package    Zend
-     * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
-     * @license    http://framework.zend.com/license/new-bsd     New BSD License
+     * @var null|Exception
      */
-    class Zend_Exception extends Exception
-    {
-        /**
-         * @var null|Exception
-         */
-        private $_previous = null;
+    private $_previous = null;
 
-        /**
-         * Construct the exception
-         *
-         * @param  string $msg
-         * @param  int $code
-         * @param  Exception $previous
-         * @return void
-         */
-        public function __construct($msg = '', $code = 0, Exception $previous = null)
-        {
+    /**
+     * Construct the exception
+     *
+     * @param  string $msg
+     * @param  int $code
+     * @param  Exception $previous
+     * @return void
+     */
+    public function __construct($msg = '', $code = 0, Exception $previous = null)
+    {
+        if (version_compare(PHP_VERSION, '5.3.0', '<')) {
             parent::__construct($msg, (int) $code);
             $this->_previous = $previous;
+        } else {
+            parent::__construct($msg, (int) $code, $previous);
         }
+    }
 
-        /**
-         * Returns previous Exception
-         *
-         * @return Exception|null
-         */
-        final public function getPrevious()
-        {
-            return $this->_previous;
+    /**
+     * Overloading
+     *
+     * For PHP < 5.3.0, provides access to the getPrevious() method.
+     * 
+     * @param  string $method 
+     * @param  array $args 
+     * @return mixed
+     */
+    public function __call($method, array $args)
+    {
+        if ('getprevious' == strtolower($method)) {
+            return $this->_getPrevious();
         }
+        return null;
+    }
 
-        /**
-         * String representation of the exception
-         *
-         * @return string
-         */
-        public function __toString()
-        {
+    /**
+     * String representation of the exception
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        if (version_compare(PHP_VERSION, '5.3.0', '<')) {
             if (null !== ($e = $this->getPrevious())) {
                 return $e->__toString() 
-                    . "\n\nNext " 
-                    . parent::__toString();
+                       . "\n\nNext " 
+                       . parent::__toString();
             }
-            return parent::__toString();
         }
+        return parent::__toString();
     }
-} else {
+
     /**
-     * @category   Zend
-     * @package    Zend
-     * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
-     * @license    http://framework.zend.com/license/new-bsd     New BSD License
+     * Returns previous Exception
+     *
+     * @return Exception|null
      */
-    class Zend_Exception extends Exception
+    protected function _getPrevious()
     {
-        public function __construct($msg = '', $code = 0, Exception $previous = null)
-        {
-            if (!is_int($code)) {
-                $code = (int) $code;
-            }
-            parent::__construct($msg, $code, $previous);
-        }
+        return $this->_previous;
     }
 }