2012-01-10 1 views
0

へと文私は論理演算を実装しようとしていますと、この短縮表記が許可されているかどうかと思いまして:PHP速記構文

$hasPermissions &= user_hasAppPermission($user_id, $permission); 

または私はこれを行うにしています:

$hasPermissions = $hasPermissions && user_hasAppPermission($user_id, $permission); 
+0

それはできますが、厳密には事故ではありません。あなたの変数が前の真のブール値であって、関数が真のブール値を返すならば、暗黙の型キャストは正しい結果につながります。しかし、本当に、あなたはすべきではありません。 – mario

答えて

5

簡略&=bitwise assignment operationです。これは2番目の文と同じではありません。それは、(単一のアンパサンドに注意してください)やっと同じで次のようになります。私が見ることができるものから、

$hasPermissions = $hasPermissions & user_hasAppPermission($user_id, $permission); 

は、あなたの「長い」ステートメントがあるとして罰金です。

+0

ありがとう、ティム。それはまさに私が探しているものです。 –

0

私のようなものだろう:PHPで

$hasPermissions = (($hasPermissions) && (true === user_hasAppPermission($user_id, $permission))) ? true : false; 
1

を、これらのlogical operationsが用意されています

$val1 && $val2 
$val1 and $val2 

OR

さらに

ませ

! $val 

XOR

$val1 xor $val2 

look at this pageを持っています。 2つの演算子&&||の優先順位は、andorの順に異なります。ところで

$hasPermissions = $hasPermissions && user_hasAppPermission($user_id, $permission); 

はこのように、あなたの 番目のオプションは、移動するための方法である私は常に平等のために比較すること ===を使用 に提案すると思います。 === ==が値をキャストしている間、そのオペランドの型が同一で値が保証されます。