2010-08-31 14 views
0

Quelqu'un peut-il expliquer en détail ce que font ces déclarations if? À quoi les trois signes === signifient-ils dans le premier, et que signifie le simple & dans le second?Expliquer php si la déclaration

grâce

$aProfile = getProfileInfo($iId); 
    if($aProfile === false) 
     return false; 

    if(!((int)$aProfile['Role'] & $iRole)) 
     return false; 
+1

Pourquoi le downvote? Il y a beaucoup de développeurs PHP * novice * qui sont confondus avec '==' et '==='. – shamittomar

Répondre

8

=== tests pour l'égalité type-safe.

'3' == 3 retournera vrai, mais '3' === 3 ne sera pas, parce que l'un est une chaîne et un est un entier. De même, null == 0 retournera vrai, mais null === 0 ne sera pas; 10.00 == 10 retournera vrai, mais pas 10.00 === 10.

& est l'opérateur AND au niveau du bit. Il renvoie un masque de bits dans lequel un bit est défini si à la fois les bits correspondants sont définis à partir des deux masques de bit d'origine.

Par exemple:

$x = 5; 
$y = 17; 
echo $x & $y; 

provoque 1 à être répercuté. $x est ...000101, $y est ...010001. Le seul bit qui est défini dans à la fois d'entre eux est le plus à droite, de sorte que vous obtenez ...000001, ce qui est 1.

+5

Et mon favori le long de ces lignes: '1.0 === 4/4' est faux ...' 1 === 4/4' est vrai ... (Bien sûr, '1.0 == 4/4' est vrai) ... (La raison pour laquelle c'est mon préféré, c'est '1.5 === 6/4' est vrai.) Donc la division retourne parfois un float, d'autres fois un int ...) – ircmaxell

+1

@ircmaxell: Apparence particulière mais ce n'est rien d'unique à PHP n'a rien à voir avec l'implémentation de PHP. C'est simplement le PHP '===' capable d'exposer les mécanismes de stockage sous-jacents. Le résultat de '4/4' ne nécessite pas de stockage à virgule flottante donc il n'est pas utilisé. – webbiedave

+0

@webbiedave: Oh je sais. Mais ce n'est certainement pas quelque chose que je pense arriver (je suppose que la division renvoie toujours un flotteur). Je ne dis pas qu'il y a quelque chose de «faux», juste quelque chose à surveiller car il peut être déroutant au premier abord (si vous utilisez '===' ou tapez des vérifications ('is_float') ... – ircmaxell

3

Voici un bon guide pour les opérateurs PHP:

http://www.tuxradar.com/practicalphp/3/12/3

Voir la section sur les opérateurs binaires pour plus d'informations sur le &.

+0

Beau lien! L'opérateur === (identique) est très rarement utilisé par rapport à == (égalité), mais il peut être utile à l'occasion. Pour être sûr que vous êtes clair, deux variables ne sont identiques que si elles ont la même valeur et si elles sont du même type. – webdad3

+0

Merci, Jeff. Il faut noter, cependant, que l'opérateur === fait vraiment ce que les débutants attendent == faire (il vérifie l'égalité d'identité et le type ... donc 1 === vrai est faux alors que 1 == vrai est vrai) . Il est important pour un débutant de bien regarder toutes les déclarations de vérité possibles avant d'utiliser l'opérateur == avec n'importe quelle fréquence ... sinon, il peut rencontrer des problèmes qui ne sont pas immédiatement faciles à résoudre. – treeface