哪个代码更有效?

时间:2011-12-24 07:07:22

标签: php exception

我想知道哪个代码更有效,意味着更快更好可靠。 当我的客户端将数据发布到我的网站时,我不允许他们使用除字母数字字符以外的任何其他内容,因为不需要其他人。 我的问题是,一个例外会更快,更可靠吗?或者我应该远离这个目的的例外? 这是我的代码。

正常方式 -

function checkStr ($str)
{
  if (preg_match('/[^0-9a-zA-Z]/', $str) > 0))
  {
     return false;
  }
  else
  {
     return true;
  }
}
if (checkStr($_POST['field']) == true)
{
  //continue
}
else
{
  echo "Invalid characters";
}

例外 -

function checkStr ($str)
{
    if (preg_match('/[^0-9a-zA-Z]/', $str) > 0)
    {
        throw new Exception('Invalid characters');
    }
    return true;
}

    try
    {
        checkStr($_POST['field']);

        //no exception, continue with code 
    }

    catch (Exception $e)
    {
      echo $e->getMessage();

    }
}

2 个答案:

答案 0 :(得分:2)

虽然Exceptions会有一些性能开销,但性能并不是唯一的标准。还要考虑代码大小和复杂性以及整体可维护性。

我经常遇到代码,其中未检查方法的返回值,因此忽略错误。

哪种代码更容易理解

 if ( do this ) 
     if (do that)
        if (something else)
            OK
        else
            bad something
      else
         bad that
 else
      bad this

或有例外

 try
     do this
     do that
     something else
 catch
     report error

我不是一个php程序员,但在Java中我倾向于使用异常很多。

答案 1 :(得分:0)

异常与正常的程序流控制功能(if,else,elseif等)相关的开销更多,因此从这个角度来看,第一个选项更快。例外是棘手的事情,因为它们是PHP的一个相对较新的补充,人们倾向于过度使用它们。通常,当代码中出现的情况异常时,我会尝试仅抛出异常。

例如,如果我有一个函数,其中有效输入是整数1-100,那么我输入40时返回true,输入493时返回false,并输入异常输入“金橘”

顺便说一句,你可以在一行中编写函数的第一个版本:

function checkStr ($str)
{
    return (preg_match('/[^0-9a-zA-Z]/', $str) > 0));
}