Исключения в родных функциях PHP - PullRequest
0 голосов
/ 03 марта 2010

Большинство функций в PHP возвращает true / false:

var_dump (is_int ("1")); // false

Могу ли я настроить PHP для выдачи исключений вместо логического?

try {is_int ("1")} catch (Exception $e) {exit ($e->getMessage ());}

Спасибо.

Ответы [ 4 ]

5 голосов
/ 03 марта 2010

Не могли бы вы просто использовать бросок?

<?php

function myFunction($var)
{    
    if(!(is_int($var))
    {
        throw new Exception('Custom message about the error');
    }
}

?>

А просто есть блок try / catch, чтобы поймать вашу проблему?

<?php
try
{
    myFunction(1);
    myFunction("1");
}
catch
{
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
?>
2 голосов
/ 03 марта 2010

Я согласен, is_int было бы ужасно выбросить исключение, но вы могли бы превратить предупреждения и ошибки в исключения, установив обработчик ошибок, который сгенерирует исключение с предупреждением или сообщением об ошибке:

class ErrorOrWarningException extends Exception
{
    protected $_Context = null;
    public function getContext()
    {
        return $this->_Context;
    }
    public function setContext( $value )
    {
        $this->_Context = $value;
    }

    public function __construct( $code, $message, $file, $line, $context )
    {
        parent::__construct( $message, $code );

        $this->file = $file;
        $this->line = $line;
        $this->setContext( $context );
    }
}

function error_to_exception( $code, $message, $file, $line, $context )
{
    throw new ErrorOrWarningException( $code, $message, $file, $line, $context );
}
set_error_handler( 'error_to_exception' );

Не то чтобы это волшебным образом не изменило не ошибки, чтобы генерировать исключения, как вы объяснили, но я думаю, что это может быть именно то, что вы ищете.

1 голос
/ 03 марта 2010

нет, вам либо придется

  • используйте операторы if / else с обработкой ошибок или
  • написать оболочку, которая выбрасывает исключения или
  • используйте для этого библиотеку классов / каркас

я бы пошел на # 1

0 голосов
/ 03 марта 2010

Полагаю, вы имеете в виду функции, которые возвращают false и генерируют предупреждение о сбое, например, fopen (). Да, вы можете (и на самом деле должны) преобразовать эти предупреждения в исключения, используя методику, изложенную здесь .

...