@blog.justoneplanet.info

日々勉強

PHP Operators(演算子)

■Arithmetic Operators(算術演算子)

特に変わったところはない。余りは繰り返しをコントロールする際に有用だったりする

<?php
//加算
$a = 5 + 2.3;
//減算
$a = 8 - 2;
//乗算
$a = 7 * 5;
//除算
$a = 8 / 2;
//剰余
$a = 21 % 8;
?>

■Incrementing or Decrementing Operators(インクリメント演算子、デクリメント演算子)

演算子の位置が後ろの場合は値を返してから、加減の処理が行われる。この演算子は
戒めとして使わないプログラマーもいるようだ

<?php
$x = 1;
echo $x++;//output 1
echo ++$x;//output 3
echo --$x;//output 2
echo $x--;//output 2
?>

■The String Concatenation Operator(文字列結合演算子)

必要に応じてオペランドが文字列に変換される

<?php
$str = 'Hello ' . 'World';
echo $str;// Hello World
$str .= ', John';
echo $str;// Hello World, John
?>

■Bitwise Operators(ビット演算子)

滅多に使用しないと思われがちだが、PHPの関数の引数では頻繁に使用されるので、必ず覚えておかなければならない。

&
Bitwise AND。両方とも「1」だった場合は結果におけるそのビットが「1」になる。それ以外は「0」となる。
|
Bitwise OR。両方とも「0」だった場合は結果におけるそのビットが「0」になる。それ以外は「1」となる。
^
Bitwise XOR。組み合わせが「0」と「1」だった場合にけっかにおけるそのビットが「1」になる。両方のビットが等しい場合は「0」となる。
<?php
print(5 & 6);//101 & 110 => 100(4)
print(4 | 6);//100 | 110 => 110(6)
print(5 ^ 6);//101 ^ 110 => 011(3)
?>
~
ビット否定演算子・・・2進表現にした後で、0を1、1を0に変換する
<?php
$x = 0;
echo ~$x;//output -1
?>

■Bitwise Left / Right Shift

$x自身は変化しないことに注意しなくてはならない。基本的には2進数に変換し、各ビットを演算子が示す方向にシフトする。

<?php
$x = 1;
echo $x << 1;//output 2
echo $x << 3;//output 8
$a = 16;
echo $a >> 1;//output 8
echo $a >> 2;//output 4
?>

■Assignment Operators(代入演算子)

変数に値を代入する働きをする

<?php
$str = 'Hello World';

$x = 1;
$x += 5;
print($x);// output 6
?>

■Referencing Variables(参照)

オブジェクトを除く全てのデータ型は「&」を使わない限り、コピーとして値が渡される

<?php
$dog = 'Jack';
$cat = &$dog;
print($cat);//Jack
$cat = 'Emily';
print($dog);//Emily
?>

■Comparison Operators(比較演算子)

PHPは動的型付・・・。但し、この変換のパターンを覚えるのは非常にやっかいであるので、「===」や「!==」を使うことをお勧めする

$a = '1';
$b = 1;
if($a == $b){
    //execute
}
if($a === $b){
    //not execute
}
if($a != $b){
    //not execute
}
if($a !== $b){
    //execute
}
A > B, A >= B
AはBより大きい、AはB以上
A < B, A <= B
AはBより小さい、AはB以下

■Logical Operators(論理演算子)

$a = true;
$b = false;
//AND Operator(論理積演算子)
if($a && $b){
    //not execute
}
//OR Operator(論理和演算子)
if($a || $b){
    //execute
}
//XOR Operator(排他的論理和演算子)
if($a XOR $b){
    //execute
}
//論理否定演算子
$a = !$a;

■Cast Operators(キャスト演算子)

オペランドを特定の型に変換

$a = '7';
$b = (int) $a;

class Animal {
    $name = 'Pochi';
    $type = 'dog';
}
$animal = new Animal();
$a = (array) $animal;
print_r($a);
/**
 * array
 * [name] => Pochi
 * [type] => dog
 */

$b = array('name' => 'Pochi', 'type' => 'dog');
$c = (object) $b;
print($c->name);//Pochi

オブジェクトを配列にキャストすると、プロパティと値を関連付けた配列になる。配列をオブジェクトにキャストすると、配列のキーがオブジェクトのプロパティ名に、値がプロパティの値になる

■3項演算子

この演算子も好き嫌いがわかれるかもしれない。この演算子を上手く使うと、コードがスッキリとし見やすくなることもある。但し、逆に見にくくなることもある。個人の好き嫌いと扱いの技量が影響する非常に奥の深い演算子だと個人的には思う

<?php
$a = true;
$b = false;
$name = ($a && $b)? 'John' : 'Jack';
print($name);//Jack
?>

■エラー抑制演算子

特定の関数などにおけるエラーの発生を抑制する

<?php
$dat = @simplexml_load_string($str);
?>

■実行演算子

バッククォーテーションを使うと、OSに直接コマンドを渡せる。コレは非常に強力な機能だがOSコマンドインジェクションなどのセキュリティホールにも繋がる。個人的には可能な限り使わないでおきたいところだ

<?php
$directory = `ls`;
print($directory);
?>

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment