public function __construct()
 {
     $args = func_get_args();
     $previous = null;
     switch (count($args)) {
         case 2:
         case 3:
             $message = $args[0];
             $code = (int) $args[1];
             break;
         default:
             $message = $this->getFromCode($args[0]);
             $code = (int) $args[0];
             break;
     }
     foreach ($args as $key => $value) {
         if ($value instanceof Exception) {
             $previous = $value;
         }
     }
     parent::__construct($message, $code, $previous);
 }