PEAR_Error

Buteo

[CDR/DVP]
PEAR_Error

хочу переделать у себя отлов пользовательских ошибок (поля неправельно заполнены и т.п.) с помощью PEAR

т.е. идея где-то такая:
PHP:
if(чтото не так1)
  новая ошибка1

if(чтото не так2)
  новая ошибка2

if(есть ошибки)
 вывод заголовка, ошибок, остального...
вообщем интересует как лучше создавать вот эти "новая ошибка#" и определять есть ли они,.. может кто примерчиком поделится ... ссылочкой...(pear.php.net читал :))
 

Romantik

TeaM PHPClub
Документация довольно хорошо снабжена примерами даже собственных функций обработки ошибок.
 

kvn

programmer
как статик методами:
$err_object = PEAR::throwError($message, $code, $userinfo);

можно в начале создавать экземпляр:
$pear = &new PEAR();

а потом,
$pear->throwError(...);

Типа так:
PHP:
if (something):
  $errors[] = PEAR::throwError('shit happens', -1, 'Go to f*** your self to fix this problem!');

if (something else):
  $errors[] = PEAR::throwError('another shit happens', -6, 'You need girl to fix your problem!');

if (PEAR::isError($errors[0])) { 
  //  Если была хоть одна ошибка..
   foreach ($errors as $err) {
    echo $err->GetMessage(), $err->getUserInfo();
  }
}

Можно вместо throwError юзать raiseError(), но так проще:
-- цитата --
// {{{ throwError()

/**
* Simpler form of raiseError with fewer options. In most cases
* message, code and userinfo are enough.
*
-- конец цитаты --

типа так..
 

Tronyх

Новичок
ИМХО для отлова ошибок PEAR очень неудобен. Так лучше:
PHP:
<?
class Errors {
var $Errors=array();

function SetError($msg) {
    if($msg != "")
        $this->Errors[]=$msg;
}

function isError() {
    return (sizeof($this->Errors)) ? 1 : 0;
}

function GetErrors() {
    return $this->Errors;
}
}
?>
Или вообще ограничится массивом $Errors.
 

Buteo

[CDR/DVP]
всем пасиба за ответы... сделал все равно по-своему, похоже на вариант от Tronyх, но только в массив
PHP:
$this->Errors[]=$msg;
засовываются объекты PEAR_Error
ИМХО для отлова ошибок PEAR очень неудобен.
просто PEAR уже используется ...
 

kvn

programmer
ИМХО для отлова ошибок PEAR очень неудобен. Так лучше:
интересно же чем?

Могу напомнить что в PEAR можно использовать такие вещи, как
PHP:
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($error_handler, 'hanlerMethod'));

PEAR::setErrorHandling(PEAR_ERROR_TRIGGER, E_USER_ERROR);
Темболее его можно менять в процессе выполнения скрипта.
Более того, Можно определить свой Error класс.

И еще есть такие вкусности как :
PHP:
     expectError()
    
     * This method is used to tell which errors you expect to get.
     * Expected errors are always returned with error mode
     * PEAR_ERROR_RETURN.  Expected error codes are stored in a stack,
     * and this method pushes a new element onto it.  The list of
     * expected errors are in effect until they are popped off the
     * stack with the popExpect() method.
     *
     * Note that this method can not be called statically
     *
     * @param mixed $code a single error code or an array of error codes to expect

+ можно заюзать такие вещи:

    pushErrorHandling()

    * Push a new error handler on top of the error handler options stack. Withthis
     * you can easily override the actual error handler for some code and restore
     * it later with popErrorHandling.


    popErrorHandling()

    * Pop the last error handler used
Конечно на фоне PHP5+ZE2 это выглядит уже немного устаревшим, с его try/throw/catch конструкциями, но для PHP4 это очень даже ничего...

Удачи.
http://pear.php.net/manual/en/class.pear.php
 
Сверху