<?php

namespace {
    /**
     * Zend Framework
     *
     * LICENSE
     *
     * This source file is subject to the new BSD license that is bundled
     * with this package in the file LICENSE.txt.
     * It is also available through the world-wide-web at this URL:
     * http://framework.zend.com/license/new-bsd
     * If you did not receive a copy of the license and are unable to
     * obtain it through the world-wide-web, please send an email
     * to license@zend.com so we can send you a copy immediately.
     *
     * @category   Zend
     * @package    Zend
     * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
     * @license    http://framework.zend.com/license/new-bsd     New BSD License
     * @version    $Id: Exception.php 23775 2011-03-01 17:25:24Z ralph $
     */
    /**
    * @category   Zend
    * @package    Zend
    * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
    * @license    http://framework.zend.com/license/new-bsd     New BSD License
    */
    class Zend_Exception extends \Exception
    {
        /**
         * @var null|Exception
         */
        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)
        {
            if (\version_compare(\PHP_VERSION, '5.3.0', '<')) {
                parent::__construct($msg, (int) $code);
                $this->_previous = $previous;
            } else {
                parent::__construct($msg, (int) $code, $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()
        {
            if (\version_compare(\PHP_VERSION, '5.3.0', '<')) {
                if (null !== ($e = $this->getPrevious())) {
                    return $e->__toString() . "\n\nNext " . parent::__toString();
                }
            }
            return parent::__toString();
        }
        /**
         * Returns previous Exception
         *
         * @return Exception|null
         */
        protected function _getPrevious()
        {
            return $this->_previous;
        }
    }
}
