HOME

Piece Tree Info

PHP 演算子 (7)

  • 2012-06-18 (Mon)
  • PHP
台風が近づいているようです。明日から明後日が一番影響ありそう・・。
今年は節電が特に叫ばれているようですが、蒸し暑い日は除湿をしたいものです。扇風機の前に凍らしたカバーを付けるととても冷たい風がでるようです。そのような商品を昨日見て、少し笑ってしまいました・・・。

今回は演算子の第7回目になります。
エラー制御演算子
PHPは、何かの間違いが生じると親切にエラーを表示してくれます。どこが間違っているかという推測がしやすいので、とても重宝する機能です。
しかし、たまにこのエラーが邪魔になることもあります。このような時に、エラー制御演算子を利用します。

エラー制御演算子は、「@」で表されて、エラーの出力を制御してくれます。PHPの式の前にこの「@」をつけることで、その式で発生したエラーは無視されて出力されません。
主に、ファイルやデータベースが開けなかった時のエラー回避で使われます。例えば、ファイルを開く時のエラー制御は以下のように記述します。
 @fopen("存在しないファイル名");

PHPのエラーには次のようなものがあります。
 Parseエラー(E_PARSE)
 Warningエラー(E_WARNING)
 Noticeエラー(E_Notice)


Parseエラーは、文法エラーであり、スクリプトの実行は止まります。よくある文法ミスには、行の最後に;(セミコロン)をつけ忘れたり、文字列をコーテーションで囲み忘れたなどがあります。
このParseエラーは、エラー制御演算子(@)では回避できないのがポイントです。

Warningエラーは、エラー文が出力はされますが、スクリプトの実行は止まりません。実行時に何かの問題が生じて、その箇所が実行できない時にエラーが出力されます。

Noticeエラーは軽い警告メッセージのようなもので、スクリプトの実行には問題はないが、止めておいた方がよいというエラーです。エラー文もなく、スクリプトも止まりません。PHP内部でエラーが出ているだけなので、特に気にする必要はないと思いますが、未定義の変数を使った場合にも発生するので、どこが原因であるかは知っておいたほうが良いでしょう。

エラー制御演算子は、文法エラーは回避できませんが、Warningエラーを回避したい時に利用するものだと思ってください。

PHP 演算子 (6)

  • 2012-06-15 (Fri)
  • PHP
雨がしとしとの一日が続いています。天気も晴れ間も見れるけど、曇り空がいつのまにか広がっている状態です。
食べ物には気を付けましょう。

今日は、配列演算子の紹介です。
配列演算子
一つの変数に複数の値を格納できるのが配列でしたね。通常、arrayを使って値を記述していきます。配列演算子は、ある配列の変数に他の配列の変数を加えるということは、「左辺の配列に右辺の配列を追加するとなりますが、ポイントは重複するキーは上書きしないということです。

例えば、変数Aに「あ」「い」「う」という3つの文字を格納したとします。配列にはインデックスが自動的にふられるので、「あ」は「0」、「い」は「1」、「う」は「2」の添字(インデックス番号)が付きます。
「い」という文字を指定する場合は、$A[1]と記述します。

では、下のサンプルを見てください。
<?php
 $a = array("apple","orange");
 $b = array("dog","cat","pig");

 echo '<pre>';
 print_r ($a + $b);
 echo '</pre>';
?>

20120615-p01.jpg
変数aと変数bにそれぞれ値を格納しています。そして、変数同士を足して出力していますが、変数aのappleのインデックスは「0」、変数bのdogのインデックスも「0」です。
この場合、配列演算子(この場合では、「+」ですが)を使った場合、値は上書きしませんので、出力結果で[0]は「apple」となります。

次に演奏配列を見てみましょう。
<?php
 $a = array(
  "apple" => "りんご",
  "orange" => "みかん"
 );
 $b = array(
  "dog" => "いぬ",
  "apple" => "林檎",
  "pig" => "ぶた"
 );

 echo '<pre>';
 print_r ($a + $b);
 echo '</pre>';
?>

20120615-p02.jpg
連想配列では、インデックスを任意で指定しますので、番号が重なることはあまりないですが、サンプルのように、「apple」というインデックスが重なり、それぞれひらがなの「りんご」と漢字の「林檎」という異なる値を指定した時でも、先ほどと同じように上書きされないので、出力は「りんご」となります。

配列演算子には、「+」のみでなく、等号「==」「===」、不等号「!=」「<>」などもありますが、使い方は比較演算子と同様な考え方です。つまり、比較した2つの配列のインデックスと値の関係で、等しければ(または等しくなければ)「TRUE]で、そうでなければ「False」を返すことになります。

配列は重宝する変数ですので、確実にものにしたいですね。

PHP 演算子 (5)

  • 2012-06-13 (Wed)
  • PHP
演算子の中で唯一、三項演算子と呼ばれるものがあります。それが条件演算子です。今回は、条件演算子について紹介します。

条件演算子
条件という名前が付いていることから、条件分岐の処理に使うことが分かります。条件分岐処理は、IFステートメントを一般的に使いますが、条件演算子はIFステートメントで記述するよりシンプルに記述することができます。
ただし、条件が一致するかしないかだけの判定なので、else(~それ以外)という処理はできません。
書式は次のようになります。
 (条件) ? 真の場合の処理 : 偽の場合の処理

シンプルな例を見てみます。
<?php
 $a = "100";
 echo $a == 100 ? "OK" : "NG";
?>

20120613-p01.jpg
上の例では、変数$aに文字列の「100」を代入しています。そして、条件演算子の中で、変数$aが「100」という値と等しければ、「OK」の処理を行い、そうでなければ「NG」の処理を行うとなっています。
値は「100」なので、この条件は満たされるので、真の場合の処理が行われ、echoで出力されている結果となります。

<?php
 $a = "100";
 echo $a === 100 ? "OK" : "NG";
?>

20120613-p02.jpg
条件の中の比較演算子が「===」となり、値も値の型も等しいという条件になると、その結果は「NG」になります。

条件分岐でシンプルなものであれば、この条件演算子(3項演算子)を使うと記述も楽になります。

PHP 演算子 (4)

  • 2012-06-10 (Sun)
  • PHP
梅雨に入りました。空気が湿っていますね。
今年は例年通りに暑い夏になりそうだという予想みたいです。節電が呼びかけられていますが、体調が悪くならない程度に冷房を抑え目にしたいものです。

今日は演算子の4回目、比較演算子を紹介します。
比較演算子
比較演算子は、「左辺の値と右辺の値を比較してどうかを、その結果に応じた真偽の値を返します。比較演算子も論理演算子と同様に条件式で利用されます。
例えば、変数Aと変数Bを比較した場合、AがBより大きいとき、逆にAがBより小さいとき、あるいは、AとBが同じであるとき、などのように両方の値を比べて、それが正しい(真)、または正しくない(偽)という2つのどちらかを返します。

比較演算子には以下の9つがあります。

記述 比較
$a == $b等しい
$a === $b 等しい(型も同じ)
$a != $b 等しくない
$a <> $b 等しくない
$a !== $b 等しくない(型も同じでない)
$a < $b より少ない
$a > $b より大きい
$a <= $b ~以下
$a >= $b ~以上



一般に使われている等号や不等号の組み合わせになります。また、「!」は否定の意味を表します。
同じだという意味には「==」と「===」があります。前者の「==」は、値が等しいという事です。後者の「===」は、値と値の型の両方が等しいという意味合いです。
例えば変数Aと変数Bの2つの値には以下の値が代入されているとします。
 $A = 10; (数値の10を代入)
 $B = "10"; (文字列の10を代入)
そこで、「$A == $B」という処理であれば、この場合は真になります。値としてはどちらも「10」なので同じだと判断します。
次に、「$A === $B」という処理であれば、この場合は偽になります。値はどちらも「10」であるが、一方は数値の型で、他方が文字列型であるからです。つまり、値のデータ型が異なるので正しくないという判断になります。

否定でとなる「!=」と「<>」は同じ意味ですが、「!=」と「!==」の意味は「等しくない」ということですが、細かくなると異なります。前者は値のみが等しくない時で、後者は値は等しくても型が等しくないという意味合いまで持ちます。

例で見てみましょう。
<?php
  $a = 10;
  $b = "10";

  if($a === $b){
  echo '$aと$bは値と型まで同じ';
  }else if($a == $b){
  echo '$aと$bは値だけ同じ';
  }else{
  echo '$aと$bは値も型も違う';
 }
?>

20120610-p01.jpg
変数$aには数値の「10」、変数$bには文字列の「10」を代入しています。IFステートメントの最初の条件は「左辺と右辺の値と型の両方が等しい時」となっています。これは満たされていないので、次のelse ifステートメントの処理を行います。2つ目の条件では、「左辺と右辺の値が等しい時」となりますので、これは満たされます。つまり、「真」となるので、その中のechoの処理が行われて、画面に出力されます。

<?php
  $c = 10;

 if($c != 100){
  echo '$cは10ではありません';
  }else{
  echo '$aは10です';
 }
?>

20120610-p02.jpg
この例では、変数$cに数値の「10」を代入しています。ifステートメントでは、変数$cが「100」でなければという条件になっています。つまり、この条件は満たされているので、その中のechoの処理が行われます。もしも、ifの条件が「$c != 10」となると「変数$cは10でなければ」ということになり、この場合は偽となり、elseの処理を行います。

比較演算子もプログラムでは頻繁に使われます。考えは分かり易いですが、値と型の両方を条件にするのか、しないのかを見極めて使い分けることは覚えておきたいものです。

PHP 演算子 (3)

  • 2012-06-06 (Wed)
  • PHP
6月に入り、梅雨の季節に近づきました。天気もすがすがしくない日にちが続くようですね。

演算子も3回目になります。今回は、論理演算子について紹介します。
論理演算子
論理演算子は、「真偽の値を比較する」もので、True(真)、False(偽)で判断されます。種類には、論理積、論理和、排他的論理和、否定があります。簡単に種類別したものが次になります。
 論理積 and または && 両オペランドが「真」であればTrueを返します。
 論理和 or  または ||  いずれかのオペランドが「真」ならばTrueを返します。
 排他的論理和 xor 両オペランドの真偽値が異なればTrueを返します。
 否定 ! オペランドが「偽」ならばTrueを返します。

論理積と論理和は2通りあります。これは演算の際の優先順位が異なるからです。優先順位は、「&&」「||」「=」「==」「and」「or」となります。
また、論理演算子の特性には次のようなルールがあります。
論理積は、「左辺が真でかつ右辺が真なら真(True)を返す」という判断になりますが、もし左辺が偽であればその時点で偽と判断されるので、右辺は評価しないで結果が返されます。
論理和は、「左辺または右辺が真なら真(True)を返す」という判断になりますが、もし左辺が真であればその時点で真と判断され、右辺は評価しないで結果が返されます。

では、サンプルを見ながらどのように評価されるかを説明します。
サンプルでは、変数$aには「DOG]、変数$bには「""」を最初に代入し、IF文を通過した後に、それぞれの変数の値を出力させています。
論理積(and)
<?php
 $a = "DOG";
 $b = "";

 if(($a == "DOG") and ($b = "CAT")){
 }
 echo '$a : '.$a.'<br>';
 echo '$b : '.$b;
?>

20120606-p01.jpg
IF文の条件はand演算子を使っています。まず左辺が評価されます。この場合、変数$aの値は真(値がDOGで一致する)であるので、次に右辺が評価されます。右辺は変数$bに「CAT」を代入するということになります。
よって、IF文の後に各変数の値を出力すると、$aは「DOG」、$bは「CAT」が表示されることになります。

論理和(or)
<?php
 $a = "DOG";
 $b = "";

 if(($a == "DOG") or ($b = "CAT")){
 }
 echo '$a : '.$a.'<br>';
 echo '$b : '.$b;
?>

20120606-p02.jpg
今度はor演算子を使っています。まず、左辺の$aの評価をされます。このサンプルでは左辺は「真」であるので、この時点でTrueが返され、右辺の評価はされません。
よって、変数$bには値が代入されないままIF文を終わります。結果出力としては、変数$bは空白のままです。

排他的論理和(xor)
<?php
 $a = "DOG";
 $b = "";

 if(($a == "DOG") xor ($b == "")){
  $b = "CAT";
 }
 echo '$a : '.$a.'<br>';
 echo '$b : '.$b;
?>

20120606-p02.jpg
排他的論理和は、左辺、右辺のいずれかが偽であれば真(True)を返します。サンプルでは、左辺も右辺も真であるので、判定は「偽」となります。よって、変数$bに「CAT]は代入されません。もし、どちらかの評価が「偽」であれば、判定は「真」となり、変数$bに値が代入されてIF文を通過することになります。

否定(!)
<?php
 $a = "DOG";
 $b = "";

 if(!$b){
  $b = "CAT";
 }
 echo '$a : '.$a.'<br>';
 echo '$b : '.$b;
?>

20120606-p01.jpg
否定は、オペランドが「偽」であればTrueを返すという判定をします。IF文では、まず変数$bの真偽を判定して「偽」と評価されます。これは、$bは空文字列だからです。そして、その否定の「真」と判定されることになります。
分かりにくい感じがしますが、少し違った言い方をすれば、このサンプルでは変数$bが空であれば真を返すということになります。IF文で真と判定されると$b="CAT"が処理されてIF文を通過します。結果としては、$bは「CAT」が表示されることになります。

このように論理演算子は条件文の時に利用されますので、どのような条件を付けるかを見極めて使うことになります。

PHP 演算子 (2)

  • 2012-05-30 (Wed)
  • PHP
今回も、演算子の続きを紹介します。
算術演算子は、加減乗除などの計算に使う記号と同じですので、特に問題なく使えますね。
例えば、変数$aにもう一度$aの値を足したい場合は次のように記述できます。
 $a = $a + $a または  $a .= $a
もし、$aの値が「10」であれば、$a = $a + $aでは「20」になりますが、$a .= $aの値は「2020」となります。「.」は連結演算子であり文字列をつなげる処理を行いますので、数字であっても文字列として扱うからです。
よって、数字を計算したいのであれば「$a = $a + $a」と記述することになります。

しかし、「$a = $a + $a」の記述は効率よい書き方ではありません。そこで、プログラムでは複合演算子という次のような書き方があります。
 $a = $a + $a → $a += $a
 $a = $a - $a → $a -= $a
 $a = $a * $a → $a *= $a
 $a = $a / $a → $a /= $a
 $a = $a % $a → $a %= $a
等号「=」の前に記号を記述することで、左辺の値に右辺の値で計算処理した結果を再度左辺に代入するということになります。
仮に$aの値を「5」として、再度$aの値を足すときには次のように書けます。
 $a = $a + $a;  結果は「10」
 $a += $a;    結果は「10」
どちらの書き方がスマートであるかというと下の方ですね。しかも、処理の速さも下の書き方の方が速いと言われています。
この複合演算子は、算術演算子と連結演算子を合体させた書き方になります。

次に「加算子/減算子」を紹介します。これは、被演算子(オペランド)の値を「1」だけ増減させるための演算子です。加算子をインクリメント、減算子をデクリメントと呼びます。これには4つの種類があります。
 ++$a 前置加算子 「$a」に「1」を足して、その結果を返します。
 $++a 後置加算子 「$a」の値を返し、「$a」に「1」を足す。
 --$a 前置減算子 「$a」から「1」を引いて、その結果を返します。
 $a-- 後置減算子 「$a」の値を返し「$a」から「1」を引く。
加算子と減算子には前置と後置の2つがあるという事になります。どのように処理されるか、少し分かりづらいので次の例を見てください。
<?php
 $a = 10;
 echo ++$a;
 echo "<br>";
 echo $a;
?>

20120530-p01.jpg
結果の図を見るとどちらとも「11」という結果を出力しています。
「echo ++$a;」は「$aに1を加算させてから出力する」という意味になります。よって、その後の「echo $a;」は、すでに1足されている$aの値が出力されます。この前置加算子は、変数に「1」を足してから処理することになります。

次は、後置加算子を見てみましょう。
<?php
 $a = 10;
 echo $a++;
 echo "<br>";
 echo $a;
?>

20120530-p02.jpg
結果の図を見ると、「echo $a++;」の出力が「10」でその後に記述している「echo $a;」の出力は「11」となっています。
つまり、「echo $a++;」は、「$aを出力(処理)した後に1を足す」ということになり、結果は10となります。その後、1が足された結果として「echo $a;」の出力が11となります。これが後置加算子です。

前置減算子、後置減算子もプラスがマイナスに変わっただけで同じ考え方になります。
<?php
 $a = $b = 10;
 echo --$a;
 echo "<br>";
 echo $a;
 echo "<br>";
 echo $b--;
 echo "<br>";
 echo $b;
?>

20120530-p03.jpg
最初が前置減算子で、1を引いてから処理を行います。次が後置減算子で処理をしてから1を引くことになります。だから、変数$bは「10」なので、その「10」をいう値を表示してから1を引き、その後の「echo $b;」で$bから1を引いた$bが出力されることになります。

前置型の書き方は以下の省略となっていると考えてください。
 $a = $a + 1 → $a += 1 → ++$a
 $a = $a - 1 → $a -= 1 → --$a

加算子、減算子は繰り返し処理の時に良く利用されます。
<php
 for($i=1;$i<=5;$i++){
  echo $i."<br>";
 }
?>

20120530-p04.jpg
上の例では、後置加算子になっていますが、「++$i」という前置加算子でも結果は同じです。
他のプログラミングでも加算子、減算子は存在しますので、基礎の演算子であることは理解できるかと思います。

PHP 演算子 (1)

  • 2012-05-27 (Sun)
  • PHP
前回は演算子とは何か?ということを紹介しました。その最初として「代入演算子」である「」記号は、「右辺の値を左辺に代入し、その値を返す」ものであるということは理解できたと思います。

今回は、文字列演算子と代数演算子について紹介します。文字列演算子は「連結演算子」、代数演算子を「算術演算子」とも呼びます。ここでは、一般的に呼ばれる、連結演算子・算術演算子という名称を使います。

連結演算子は、文字列をつなげるもので、「.(ピリオド)」を使います。
例えば、「こんにちは」と「お元気ですか」という2つの文字列をつなげたい時は次のように記述します。
 "こんにちは" . "お元気ですか"
文字列はダブルクォーテーションで囲み、つなげる文字列の間にピリオドを記述します。

では、簡単な例を紹介します。
<?php
 $a ="Hallo" . "!!";
 echo $a;
 echo "<br>";
 echo $a .= "!!";
 echo "<br>";
 echo $a .= $a;
?>

20120527-p01.jpg
見て分かるように、文字列をつなげたものを一旦変数に格納します。上の場合は、$aという変数を使用しています。
最初は、「Hello」と「!!」を繋げた文字列が表示されます。次に、「 $a .= "!!"」という記述があります。
これは、連結代入演算子となり、$aに「 "!!"」をつなげて、再度$aの処理をしています。つまり、次の記述を省略したものになります。
 $a =$a . "!!" →  $a .= "!!"
また、3つ目の「$a .= $a」は、$aの値をもうひとつつなげるという書き方になるので、文字列を繰り返したいときの書き方です。

次に算術演算子は、日頃使用している計算記号になります。算術演算子は5つあり、以下のような種類があります。
  加算演算子(両オペランドを足した値を返す)
  減算演算子(左辺と右辺の差の値を返す)
  乗算演算子(左辺と右辺の積の値を返す)
  除算演算子(左辺と右辺の商の値を返す)
  剰余演算子(左辺を右辺で割った余りの値を返す)

簡単な例を紹介します。
<?php
 $a = 10;
 $b = 3;
 echo "$a+$b=".$c=$a+$b."<br>";
 echo "$a-$b=" .$c=$a-$b."<br>";
 echo "$a*$b=" .$c=$a*$b."<br>";
 echo "$a/$b=" .$c=$a/$b."<br>";
 echo "$a%$b=" .$c=$a%$b."<br>";
?>

20120527-p02.jpg
上の例を見てもらったよう、計算結果が変数$cに代入されて表示されます。

連結演算子、算術演算子ともプログラミングを記述する時には基本的な処理ですので、問題なく解釈しておきましょう。

More...

Home

<   2017-10   >
1234567
891011121314
15161718192021
22232425262728
293031    
Search
Feeds

Page Top