PHP中的非重复错误处理

时间:2012-04-06 09:40:30

标签: php error-handling yii

在我大学时代,我记得一个处理这类错误的PHP代码..

$rs = $mymodel->find("usr=:usr",array("usr"=>"mahan")) on error echo $mymodel->geterror();

但我知道上面的代码是错误的......

这是一个我不记得的错误处理代码..

也许你会建议像这样的东西

/**First code suggestion**/
    if(!mymodel->find("usr=:usr",array("usr"=>"mahan"))){
        $rs = mymodel->find("usr=:usr",array(":usr"=>"mahan"));
    }

或者像这样

/**Second code suggestion**/
    try{
       $rs = mymodel->find("usr=:usr",array("usr"=>"mahan"));
    }
    catch(Exception $e){
      dump($e);
    }

我的问题是我不想重复相同的操作只是为了测试它是否会有错误(显示在第一个代码建议中)。

第二个代码建议不起作用。

我在问题中最重要的错误处理是错误的,但我认为它可以解决我的问题(我只是不记得正确的问题)...如果不告诉我你的建议。

我正在使用Yii Framework

2 个答案:

答案 0 :(得分:2)

不知道你在哪里遇到路障,因为你仍然可以分配一个变量:

if (! $rs = $mymodel->find("usr=:usr",array("usr"=>"mahan")))
{
   # failed.
}

因此无需再次执行相同的功能。

答案 1 :(得分:1)

你可能正在考虑臭名昭着的mysql_query( $query ) or die( mysql_error( ) );结构。 PHP从未有过“on error doSomething”结构。也就是说,仍然可以使用上述结构:

<?php

function foo( ) {
    return false;
}

function error( $string ) {
    echo $string;
}

$rs = foo( ) or error( 'Alas' );

如果foo( )返回false,则表示调用error( 'Alas' );。如果foo( )返回任何可以求值为true的内容(例如true,int> 1,非空字符串,资源或结果集),则永远不会调用error( 'Alas' )

但就个人而言,我更喜欢以下构造:

<?php

function foo( ) {
    return false;
}

function error( $string ) {
    echo $string;
}

$rs = foo( );

if( $rs === false ) { 
    error( 'Alas' );
}

如果找不到用户,我不会将此视为“例外”情况,只是找不到用户。例外是非常有用的,但我倾向于在我无法再处理请求的情况下将它们用于冒泡质量。