Вопрос о возврате функции PHP - PullRequest
1 голос
/ 05 июля 2011

Я хочу проверить, не была ли успешно выполнена какая-либо из трех функций внутри 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 успешно выполнены, если нет, вернутьложный.Нужно ли проверять каждую функцию следующим образом или есть лучший способ ?

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 ]

1 голос
/ 05 июля 2011
  if($ext == "gif" or $ext == "png"){
if ((!@imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127)))
    || (!@imagealphablending($new, false))
    || (!@imagesavealpha($new, true)) )
   {
        return false;
   }

}    

это также будет выполнять ту же функцию.Но в обоих случаях вы не узнаете, какая функция не удалась.

0 голосов
/ 05 июля 2011

Ниже я хотел бы это сделать.

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.

Есть более прекрасные способы сделать это, но я считаю, что этот способ достаточно ясно дает понять, что именно происходит.

0 голосов
/ 05 июля 2011

Я думаю, что все, что вы делаете, вполне нормально, однако вы можете объединить выражения.Он делает то же самое, и в случае, если функция возвращает 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)
    ;
0 голосов
/ 05 июля 2011
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));

Не знаю, требуется ли здесь @.Вы должны попытаться избежать этого.

0 голосов
/ 05 июля 2011

Вы можете настроить собственный обработчик ошибок, который переводит все ошибки PHP в ErrorException s и регистрирует его глобально. Как только вы это сделаете, ошибка в любой из трех функций вызовет исключение, которое вы можете обработать с помощью блока try / catch.

0 голосов
/ 05 июля 2011

Вы можете объединить их в 1 единственный if, но ваш метод, вероятно, является лучшим способом, потому что он не выполнит следующие операторы, если один из вызовов функции завершится неудачей.

...