2011-07-05 3 views
1

Je souhaite vérifier si l'une des trois fonctions de la fonction IF ne s'est pas exécutée correctement. Si l'un d'entre eux n'a pas fonctionné, je veux obtenir une valeur de retour fausse.Question à propos de la fonction PHP return

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

Par exemple, je veux savoir si toutes les trois fonctions imagecolortransparent, imagealphablending, imagesavealpha ne menait avec succès, sinon, return false. Ai-je besoin de vérifier chaque fonction comme suit ou est-il une meilleure façon?

if($ext == "gif" or $ext == "png"){ 
    if ([email protected]($new, imagecolorallocatealpha($new, 0, 0, 0, 127))) 
     return false; 
    if ([email protected]($new, false)) 
     return false; 
    if ([email protected]($new, true)) 
     return false; 
} 

Merci.

+0

Qu'est-ce que __better__? – gnur

+0

Je me demandais juste si je dois retourner le faux pour chacune des fonctions, parce que dans ma fonction de redimensionnement d'image im en utilisant de nombreuses fonctions liées à l'image, donc je dois retourner chaque valeur de retour de fonction individuellement. – sunjie

Répondre

0

Vous pouvez les joindre en 1 seul si, mais votre méthode est probablement la meilleure car elle n'exécutera pas les instructions suivantes si l'un des appels de fonction échoue.

+2

L'opérateur booléen '&& 'se court-circuitera également, arrêtant l'exécution quand un' false' est rencontré. – deceze

0

Vous pouvez configurer un gestionnaire d'erreurs personnalisé qui convertit toutes les erreurs PHP en ErrorException s et l'enregistre globalement. Une fois que vous avez fait cela, une erreur dans l'une des trois fonctions déclenche une exception, que vous pouvez gérer avec un bloc try/catch.

0
if ([email protected]($new, imagecolorallocatealpha($new, 0, 0, 0, 127)) 
    || [email protected]($new, false) 
    || [email protected]($new, true)) return false; 

ou tout simplement

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

Je ne sais pas, si le @ est nécessaire ici. Vous devriez essayer de l'éviter.

0

Je pense que ce que vous faites est tout à fait correct, vous pouvez concaténer les expressions cependant. Il fait la même, et dans le cas où une fonction retourne false, l'expression ne sera pas suivie pour le reste (optimisation d'exécution):

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; 
} 

Ou en utilisant une variable et épargnant le second se rendant ainsi plus expressif:

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

Voici comment je le ferais.

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; 
} 

Fondamentalement, je suis And -ment toutes les réponses pour vérifier qu'elles sont toutes vraies. Si l'un d'entre eux renvoie FALSE, la fonction renverra FALSE.

Il existe d'autres façons de le faire, mais je trouve que c'est exactement ce qui se passe.

+0

Puis-je demander pourquoi le downvote? Je suis toujours ouvert à la critique constructive. – Icode4food