Home > Archives > June 2012

June 2012

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」が表示されることになります。

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

More...

Home > Archives > June 2012

Search
Feeds

Page Top