关于PHP函数返回的问题

时间:2011-07-05 12:10:37

标签: php function return

我想检查IF中的三个函数中的任何一个是否未成功执行。如果其中任何一个没有运行,我想得到一个返回值false。

if($ext == "gif" or $ext == "png"){
    imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127));
    imagealphablending($new, false);
    imagesavealpha($new, true);
    }

例如,我想知道imagecolortransparent,imagealphablending,imagesavealpha三个函数是否都成功执行,如果没有,则返回false。     我是否需要检查以下各项功能,或者更好的方式

if($ext == "gif" or $ext == "png"){
    if (!@imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127)))
        return false;
    if (!@imagealphablending($new, false))
        return false;
    if (!@imagesavealpha($new, true))
        return false;
}

感谢。

6 个答案:

答案 0 :(得分:1)

  if($ext == "gif" or $ext == "png"){
if ((!@imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127)))
    || (!@imagealphablending($new, false))
    || (!@imagesavealpha($new, true)) )
   {
        return false;
   }

}    

这也将做同样的功能。但是你不知道哪种功能失败了。

答案 1 :(得分:0)

你可以将它们加入到单个if中,但是你的方法可能是更好的方法,因为如果其中一个函数调用失败,它将不会执行以下语句。

答案 2 :(得分:0)

您可以设置一个自定义错误处理程序,将所有PHP错误转换为ErrorException并在全局注册。完成后,三个函数中的任何一个函数中的错误都会引发异常,您可以使用try / catch块处理该异常。

答案 3 :(得分:0)

if (!@imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127))
  || !@imagealphablending($new, false)
  || !@imagesavealpha($new, true)) return false;

或只是

return (@imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127))
     && @imagealphablending($new, false)
     && @imagesavealpha($new, true));

不知道,如果此处需要@。你应该尽量避免它。

答案 4 :(得分:0)

我认为你做的很好,你可以连接表达式。它也是这样做的,如果函数返回false,其余的表达式将不会被跟踪(运行时优化):

if($ext == "gif" or $ext == "png"){
    if (
        @imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127))
        and @imagealphablending($new, false)
        and @imagesavealpha($new, true)
    ) return true;
    return false;
}

使用变量和保留第二个如果因此使其更具表现力:

if($ext == "gif" or $ext == "png")
    return 
      @imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127))
      && @imagealphablending($new, false)
      && @imagesavealpha($new, true)
    ;

答案 5 :(得分:0)

以下是我将如何做到这一点。

if($ext == "gif" or $ext == "png"){
  $return = TRUE;
  $return = $return && imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127));
  $return = $return && imagealphablending($new, false);
  $return = $return && imagesavealpha($new, true);
  return $return;
}

基本上我是And - 所有回复以验证它们都是真的。如果其中任何一个返回FALSE,则该函数将返回FALSE

有更多美丽的方法可以做到这一点,但我发现这种方式可以合理地清楚地知道发生了什么。