Tools::catchError() resp. Debug::catchError() odchytává chyby předřazené zavináčem @
- Milo
- Nette Core | 1283
Nette v0.9
Tools::tryError();
@fopen( 'nonExists' );
Tools::catchError($msg); // odchytne chybu
// Oprava Tools.php
public static function _errorHandler($code, $message)
{
if( error_reporting() == 0 ) return;
...
}
Nette v2.0
Debug::tryError();
@fopen( 'nonExists' );
Debug::catchError($msg); // odchytne chybu
// Oprava Debug.php
Nevim, tam se s error_reporting() značně manipuluje.
- David Grudl
- Nette Core | 8228
Podle me je nové chování lepší. Proč bych měl vůbec v tryError … catchError používat zavináč?
- David Grudl
- Nette Core | 8228
Už tomu rozumím, zavináčová chyba se ochytne, ačkoliv by neměla. To by se asi mohlo opravit.
Návratová hodnota se netestuje, protože vrací vždycky TRUE.
- Jan Tvrdík
- Nette guru | 2595
David Grudl napsal(a):
Návratová hodnota se netestuje, protože vrací vždycky TRUE.
Podle dokumentace by měla funkce session_start
vracet od PHP
5.3 i FALSE
.
- David Grudl
- Nette Core | 8228
Jasně, ale pro PHP 5.2 se tím nic nemění a co jsem zkoušel, v PHP 5.3 vrací true taky.
- Milo
- Nette Core | 1283
David Grudl napsal(a):
Návratová hodnota se netestuje, protože vrací vždycky TRUE.
Aha, tak toho jsem si nevšimnul.
Už tomu rozumím, zavináčová chyba se ochytne, ačkoliv by neměla. To by se asi mohlo opravit.
Bude to asi větší zásah, protože tryError()
nastavuje
error_reporting(0)
. Něco ve smyslu Tools
:
public static function tryError()
{
self::$catchMode = true;
self::$catchedMessage = "";
}
public static function catchError( &$msg )
{
self::$catchMode = false;
if( self::$catchedMessage != "" )
{
$msg = self::$catchedMessage;
return true;
}
return false;
}
public static function _errorHandler($severity, $message, $file, $line, $context)
{
if( self::$catchMode )
{
if( error_reporting() != 0 )
{
self::$catchedMessage = $message; // if 0, line was @ prefixed
}
return;
}
...
...
}
Editoval Milo (11. 10. 2010 11:21)