WebDesign Dackel

PHPの演算子について自分なりにまとめる

PHPによく出てくる演算子の名前

Hatena0
Google+0
Pocket0
Feedly0

PHPを普段書いていて、ネットの情報を頼りに独学のみで勉強してきたこともあり、一度体系的に学びたいなぁと思ったことから先日、パーフェクトPHPを読み始めました。

Part2の3章目「型と演算子」の中で扱われている、「演算子」ですが、ちゃんとした読み方を知らないで使っていたことに気が付きました。
そこで今回は、演算子の読み方や使い方などをつらつらとまとめてみました。

代入演算子

そのものズバリ値を代入する為の演算子です。
= 代入演算子

$id = 50; //変数idに50を代入

代数演算子

四則演算、剰余の演算を行う演算子が5つあります。

+ 加算
- 減算
*
/
% 剰余

こちらも基本的な演算ですね。

ビット演算子

名前の通りビットの演算を行う際に使います。

& ビット積:両辺のビットのどちらにも立っているビット
| ビット和:両辺のビットのいずれかで立っているビット
^ 排他的論理和:両辺のビットのどちらかにしか立っていないビット
~ 否定:ビットの反転
<< 左シフト:1ビット左にシフトする
>> 右シフト:1ビット右にシフトする

あまり使ったことのない演算子の一つです。笑

文字列演算子

. ドット(演算子)

文字列の連結を行う特別な演算子です。文字列ではない型の変数を結合しようとした場合。自動的に文字列へキャストされます。

$year = 2014;
$text = “今年は” . $year . “年です”;
print $text; //今年は2014年です

最初に書いたプログラミングがJSだったこともあり、「+」を使ってよくエラーを出していました。。

複合演算子

代数演算子、文字列演算子、ビット演算子は代入演算子と合わせて使うことが出来ます。

左辺 演算子 = 右辺
$id = $id + 10;

上記の式は下記の様に下記の様に直すことが出来ます。

$id += 10;

直感的になってコードも読みやすくなりますね。

加算子・減算子

ある変数に1を加える、1を引く、という演算を行って結果を変数自身に代入します。
演算子を前に置く(前置)か、後ろに置く(後置)かで返される値が変わってきます。
前置の場合、まず演算を行いそのあと結果を返します。
後置の場合、値を返したあとに演算を行います。

$length = 5;
print $length++; //5を返し、1加える
print $length;   //6になっている
print ++$length; //1を加え、7を返す
print $length;   //7になっている
print $length--; //7を返し、1を引く
print $length;   //6になっている
print --$length; //1を引き、5を返す
print $length;   //5になっている

これを読む前まで、前置と後置の違いを意識したことがありませんでしたっ。。。

論理演算子

演算対象を論理値(true,false)として評会して結果を論理値(true,false)で返します。

&& および and 論理積(両辺がtrueならtrue)
|| および or 論理和(両辺のどちらかがtrueならばtrue)
xor 排他的論理和(両辺のどちらかがtrueかつ、両辺ともtrueでない場合true)
! 否定(falseならばtrue)

「排他的論理和」は初めて見ました。

比較演算子

2つの値を比較し、その結果を論理値(true,false)で返します。

== 右辺と左辺が等しい場合にtrue。右辺と左辺で型が違う場合はキャストされる。
!= または <> 右辺と左辺が等しくない場合にtrue。右辺と左辺で型が違う場合はキャストされる。
=== 右辺と左辺が等しい場合にtrue。キャストが行われない。(厳密な比較)
!== 右辺と左辺が等しくない場合にtrue。キャストが行われない。(厳密な比較)
< 右辺より左辺が小さい場合にtrue。
> 右辺より左辺が大きい場合にtrue。
<= 右辺より左辺が小さいか等しい場合にtrue。
<= 右辺より左辺が小さいか等しい場合にtrue。
>= 右辺より左辺が大きいか等しい場合にtrue。

厳密ではない比較の際に自動で値がキャストされる点に注意して使う必要がありますね!

型演算子(instanceof)

右辺があるクラスのインスタンスである場合にtrueとなります。ある変数があるクラスかどうかを判定する際に使います。

class RssClass
{
}

$rss = new RssClass();

if( $rss instanceof RssClass ){
     print ‘$rss はRssClassのインスタンスです!';
}

三項演算子

単項演算子、二項演算子とは違った特徴を持つのが、三項演算子です。条件演算子とも言われるみたいです。
基本的な書式は下記のとおりです。

条件式 ? 式1 : 式2

三項演算子は条件式を評価してtrueなら式1を、falseなら式2を評価します。演算の返り値は式1、または式2の評価値となります。
よく使われるパターンとしては、パラメータが存在したらこの値を、存在しなければこちらの値を使う。
といった場面です。

if( isset($arg) ){
     $param = $arg;
} else {
     $param = “default”;
}

例えば、ifを使った場合だと上記の様になりますが、これを三項演算子を使って書き直すとこうなります。

$param = isset( $arg ) ? $arg : “default”;

一行に収まってスッキリとしましたね。

PHP5.3以降では式1を省いた、省略記法があったり、コードが読みづらくなってしまうので推奨されていませんがネストが出来たりします。
こちらは詳しく調べてみると勉強になりそうです。

その他の演算子

@ エラー制御演算子:式で発生するエラーを抑制します。
`` 実行演算子:外部シェルを実行する為の演算子です。shell_exec()を使うことと同じです。
-> アロー演算子:クラスのメソッドを呼び出しに使用します。

ほとんど使ったことが無い演算子があったり、普段使っていても読み方が分からなかったり、この本を通してもっとPHPを理解していきたいと思いました。

それぞれの詳しい使い方や注意点など結構省略している箇所があります。
気になる部分やよくわからない部分は、演算子の名前でググってみると勉強になるかぁと思います!