Home > Archives > April 2012

April 2012

PHP クラスの考え方

  • 2012-04-27 (Fri)
  • PHP
GW直前です。さて、何をしようか・・。ひとまず、自分でできることからを心がけている私ですが、いつの間にか映画を見ていることが多い。^^;

今日は、PHPのクラスについて紹介します。
クラスを説明するには、かなり長い内容になるので、少しずつ簡単に説明したほうが良いかと思いますので、まずはクラスというものがどのようなものかを見ていきましょう。

第17回 クラスとは
クラスは、特殊な構造をもつオブジェクトの値オブジェクトの構造を定義するものです。
クラスの中では、メンバ変数(プロパティ)、メンバ関数(メソッド)を持つことができます。
では、まず簡単なコードを見てみましょう。
<?php
 class MyClass{
  var $dog = "犬";
  var $cat = "猫";
  var $bird = "鳥";
  function myfunc(){
   echo "Look Me!";
  }
 }
 $obj = new MyClass();
 echo $obj -> cat;
 echo "<br>";
 $obj -> myfunc();
?>

上のコードはクラスの説明として記述しているものですので、実際に使えるようなコードではありません。クラスとはどのようなものであるかを理解してください。
クラスを定義する書式は次のようになります。
 class クラス名{ 定義 }
ここでは、MyClassというクラス名を付けて、{ }の中に定義したい処理を記述しています。
クラスの定義では、メンバ変数、メンバ関数という定義を行いますが、メンバ変数を定義する場合は、必ず変数の前に「var」を付けて定義します。
上のコードでは、$dog、$cat、$birdがメンバ変数を定義しています。また、メンバ関数はfunctionで定義しています。ここでは、myfunc()という関数を定義しています。

定義したクラスを使うには、new演算子を使って、クラスのインスタンスを生成します。インスタンスというのは、コピーみたいなものです。簡単な説明でいうと、実体そのものを使うのではなく、実体のクローン(コピーもの)を使うほうが何かと便利だからです。
そこで、「$obj = new MyClass();」というコードは、MyClassをコピーして、$obj変数に格納しますので、これ以降は$obj変数でクラスの中身を利用することができるという事になります。

そして、$obj -> cat;$obj -> myfunc();の部分は、オブジェクトが持つメンバ変数とメンバ関数を使用しています。
メンバ変数やメンバ関数を使用するには、「->」(アロー演算子)を使ってアクセスします。
結果をレンダリングすると以下のように表示されます。
20120427-p03.jpg

PHPでは、クラスを使っていろいろな実装を行い、それをあらゆる場面で、その中の機能を使いまわしするようなイメージとなります。
例えば、車を考えてみてください。ある高級車には、さまざまな部品が装備されています。タイヤ、ハンドル、エンジン、ミラー、バンパー、ヘッドライト、塗料・・などなど、数えきれないほどのパーツがあります。
そこで、新しい車を作りたい時、高級車のハンドルが好評だったので、ハンドルはその高級車と同じものを使おうという考え方です。全部使ってしまうと、高級車と同じものになってしまいますね。価格を抑えて、少しは高級感を出したい時などに利用されるパターンになると思います。
クラスも同じような使い方になります。
メンバ変数はクラスのプロパティにあたり、パーツになります。メンバ関数はクラスのメソッドにあたり、命令系統(ソフト)になります。

ここでは、クラスの概念が理解できるだけで良いと思います。

PHP - require -

  • 2012-04-26 (Thu)
  • PHP
昨日、深夜のTVで今の子供に見せたい魔法使いサリーという場面がありました。魔法使いサリーは、かなり昔のアニメですが、現在のアニメと違い庶民的な目線で話が展開します。

魔法使いという事なので、最終的には魔法で解決すると思いがちですが、魔法使いサリーは魔法を使わないで、何とか解決させるが本来の目的であるという事を知って驚きました。
2話の話を例に語られましたが、1つがいじめに対すること、もう1つが不得手なことでも努力すれば・・という題材でした。
アニメにしては深い内容だったですが、大人になって初めて子供時代のアニメの素晴らしさを知ったことに感動しました。

さて、今回はファイル読み込みのrequireについて紹介します。
第16回 require
前回紹介したinclude文と同じ動作を行うrequire文は、外部ファイルを読み込む操作を行います。
この二つの違いは、プログラムの実行と関係した読み込みタイミングです。
requireはプログラム実行前に指定したファイルを読み込みます。それに対して、includeはプログラム実行中に指定したファイルを読み込みます。
また、requireは毎回異なるファイルを読み込むことはできなく、指定したファイルが存在しない場合はFetal Errorを返して処理が停止ます。
それに対してincludeはループ処理を用いて、毎回異なるファイルを読み込むことができ、指定したファイルが存在しない場合はWarningを出力しますが、処理は続けられます。
require文の記述例は以下のようになります。
 require("../sample.php"); // 括弧あり

 require "../sample.php"; // 括弧なし

 $filepath = "../sample.php";
 require $filepath;   // 変数指定 

また、includeと同様にファイルが既に読み込まれている場合、同じファイルを何回も読み込んでしまうと関数の再定義などが起こりエラーとなります。それを回避するために再度読み込みをさせないようにするには、require_once文を使用します。
通常はrequire_once文を使って外部ファイルを読み込ませることが多いです。

requireとincludeの使い分けは、ファイルがない場合に処理を停止したい時はrequire文、続行したければinclude文を利用すると覚えておけばよいでしょうね。

PHP - include -

  • 2012-04-23 (Mon)
  • PHP
来週はGWになります。8日連休という人もいるようです。

今日は、includeを紹介します。
第15回 include
指定されたファイルを読み込み、評価してくれるのがincludeです。書式は次のようになります。
include ファイルのパス

require文もループとエラーを除けば、動作は全く同じになります。ループ処理の場合、require文は毎回異なるファイルを読み込むことはできませんが、include文は可能となります。
エラーについては、require文は「Fatal Error」となり処理を停止しますが、include文は「Warning」を出力しますが、読み込むべきファイルが存在しない場合でも処理は続行します。

まず簡単な実例のコードを見てみます。今回は、test.phpファイルでvars.phpファイルを読み込む処理を行いますので、2つのファイルが必要となります。
vars.php (読込先ファイル)
<?php
 $text = "こんにちは";
 $money = "10,000";
?>

test.php (読込元ファイル)
<?php
 echo "Hai! $text $money";
 echo "<br>";
 include "vars.php";
 echo "Hai! $text $money";
?>

test.phpからvars.phpを読み込みます。vars.phpの内容は、変数に値を格納しているだけです。この変数の値をtest.phpでは読み込んで、結果を出力しています。
20120423-p01.jpg
結果を見ると分かるように、最初は2つの変数には値がないので、「Hai!」のみの出力となりますが、その後にincludeで値が定義されているvars.phpを読み込んでいます。
よって、次のechoでは、2つの変数の値が出力されています。

このinclude文、require文はよく利用されます。特に、よく利用される関数を1つのファイルにまとめておいて、各ファイルからそのまとめた関数を読み込んで利用する方法が多いです。この方が、関数を修正したり、関数を追加しやすいメリットがあります。

また、読み込みをする場合include文をある変数に渡す場合は気を付ける必要があります。その例を紹介します。ここでは、3つのファイルを用意します。
return.php (1つ目の読込先のファイル)
<?php
  $var = "PHP";
 return $var;
?>

noreturn.php (2つ目の読込先のファイル)
<?php
  $var = "PHP";
?>

上のファイルの違いは、return文があるかないかです。
test.php (読込元のファイル)
<?php
 $test1 = include "return.php";
  echo $test1;
 echo "<br>";
 $test2 = include "noreturn.php";
 echo $test2;
?>

結果は次のようになります。
20120423-p02.jpg
return文は、処理を終了して結果を返すために記述しています。よって、return.phpを読み込んだ場合は、ちゃんと「PHP」と表示されます。
しかし、noretrun.phpを読み込んでそれを変数test2に入れた場合は、読み込み成功の値「1」が格納されます。
この違いのように記述には注意が必要です。

ファイルが読み込み済みであるかどうかを調べてファイルを読み込むには、include_onceを利用します。この命令は、指定したファイルを読み込みますが既に読み込まれている場合は、再度読み込まれません。
同じファイルが複数回読み込まれ、評価される可能性がある場合は、関数の再定義や変数値の再代入といった問題を回避します。

include文は必須であることも覚えておきましょう。

PHP - continue -

  • 2012-04-19 (Thu)
  • PHP
4月も半分を過ぎて、全国春便りが飛び交う毎日です。
日中を過すには、軽装の服で良くなり、動きやすく感じます。

この前、DVDで「わらの犬」を見ました。これは、昔にダスティ・ホフマン主演で上映されたものでリメイク版です。
今回の映画では、そんなに有名どころではない俳優さんでしたが、アメリカの片田舎ではこのようなこともあるんだ~という雰囲気を味わえました。

逆に怖い(ホラーでない)と感じた場面も多かったですが、日本の雰囲気とはかけ離れていたので、客観的に見れるかと思います。必見ではないですが、ちょっとした暇な時間を過ごすには、適当な映画かもしれません。

今日は、continue文を紹介します。
第14回 continue
ループ構造(繰り返し処理)において、continue文は現在の繰り返しループの残りの処理をスキップし、条件を評価した後に次の繰り返しの最初から実行を続ける時に使用します。

簡単な説明として次のようなコードがあったとします。
<?php
 $num = array(1,2,3,4,5);
 foreach($num as $value){
  if($value==4){
   continue;
  }

 echo $value."<br>";
 }
?>

結果は、「1、2、3、5」の数字が出力されます。
まず、配列として変数numに1から5の数字を格納します。変数numをforeachで繰り返し処理し、echoで格納されている数字を出力していますが、その中にif文が記述されています。
if文は値が「4」であれば、continueしなさい。つまり、スキップしなさいという命令となり、「4」という数字は表示されないという意味になります。

このcontinueは繰り返し処理を終了しなさいということではなく、処理をスキップして、次の繰り返し処理を続けなさいということになります。
繰り返し処理を完全に終了したい時は、break文を利用します。

また、ネスト(入れ子)構造のループの時には、オプションとして引数を渡すことができます。引数は、continue文から見たループのレベルで、省略された場合は「1」と見なされ、現在の構造から抜けます。
では、以下のコードをみてください。
<?php
 $i = 0;
 while($i++ < 10){
  while($i<=3){
   continue 2;
  }

 echo $i."<br>";
 }
?>

20120419-p01.jpg
このコードは、1から10までカウントアップしていく繰り返し処理です。
While構文を使って、変数iが10までの間、数字を出力させていますが、その中にもう一つWhileを使って条件を入れています。この条件は変数が3以下である間は、continueをしなさい、つまりスキップしなさいとなります。
ただ、繰り返し処理はネスト構造になっているので、continueと書いてしまうと処理が中のwhileをスキップするだけなので、延々にwhile($i<=3)の条件を行うことになります。
そこで、continue文から見た2番目の構造(最初のwhile文)をスキップしなさいという事になるので、continue 2と記述しなければなりません。
ループが3重構造であれば、continue 3となり、引数の数字を変えていくことに注目します。

continueとbreakはセットとして覚えると、実際の処理の流れをどうしたいのかが分かってくるかと思います。

PHP - switch -

  • 2012-04-17 (Tue)
  • PHP
ミサイル騒ぎはあっけない幕引きでした。技術的な未熟さが原因でしょうが、それゆえに近隣諸国に迷惑をかけるという考えはないのでしょうか?

と、同時に日本の危機管理の不具合に怒りを感じます。何もなかったのがせめての救いですが、今の政権のちぐはぐさ、未熟さ、ぶらつきにいらだちを持つ国民は多いのではないでしょうか?朝から重い話になった・・^^;

今日は、条件分岐処理となるswitch文を紹介します。

第13回 Switch
条件分岐の処理にはif文を使うことは以前に紹介しました。例えば、変数iの値によって出力する文字を変えるには以下のような記述が考えられます。
<?php
 $i = 5;
 if($i==0){
  echo "変数iは0です。";
 }elseif($i==1){
  echo "変数iは1です。";
 }elseif($i==2){
  echo "変数iは2です。";
 }else{
  echo "変数iは0~2以外の数値です。";
 }
?>

結果は、「変数iは0~2以外の数値です。」が出力されます。
しかし、条件が増えてしまうとif文は見づらくなり、メンテナンスが煩雑になってしまうことが多いようです。
そこで、条件が多い場合はswitch文を使うことで、見やすくしかも、高速な処理が期待できると言われます。
上のif文と同じ処理をswitch文で記述すると以下のようになります。case式の最後は「:」(コロン)で区切るところがポイントです。
<?php
 switch($i){
  case 0:
   echo "変数iは0です。";
   break;
  case 1:
   echo "変数iは1です。";
   break;
  case 2:
   echo "変数iは2です。";
   break;
  default:
   echo "変数iは0~2以外の数値です。";
 }
?>

見て分かると思いますが、シンプルな構造で条件が見やすく、書く手間もかからないです。switch文の書式は次のようになります。
switch(変数または式){
 case 値1:
  処理1;
  break;
 case 値2:
  処理2;
  break;
 ・・・
 default:
  デフォルトの処理;
}

defaultbreakという記述がありますが、defaultif文のelseと同じ意味で、「それ以外であれば」ということになります。つまり、条件をどれも満たさなかった場合を意味します。
また、breakは次のような意味になります。
switch文の場合はif文と違い、条件が見つかるとその処理が行われますが、処理が終わっても下の条件を見ていき実行していきます。
例えば、下のようなbreakを省いたコードがあったとします。
<?php
 $i=1;
 switch($i){
  case 0:
   echo "変数iは0です。";
  case 1:
   echo "変数iは1です。";
  case 2:
   echo "変数iは2です。";
  default:
   echo "変数iは0~2以外の数値です。";
 }
?>

結果は、「変数iは1です。」という期待通りの結果を出力しますが、実はdefaultの処理も実行してしまいます。
よって、switchの場合は明示的に処理を強制終了させるbreakを各処理の後に記述することになります。
それと、switch/caseは、緩やかな比較が前提となります。緩やかな比較とは、「==」のことで、単に「値が等しい」ということです。もう一つの厳しい比較とは「===」という記号を使い、これは「値が等しく、なおデータ型も等しい」という意味です。

switch文の使いやすさは次のような事例でも伺えます。
<?php
 switch($i){
  case 0:
  case 1:
  case 2:
   echo "変数iは0~2の中の値です。";
   break;
  default:
   echo "変数iは0~2以外の数値です。";
}
?>

上のコードのように複数の値で同じ処理を行うことができます。if文より簡潔で、見やすく書きやすいことが期待できます。

応用的な使い方でユーザ定義関数を例で紹介します。
<?php
 function getEto($kotoshi){
 switch($kotoshi % 12):
  case 0: return 'サル';
  case 1: return 'トリ';
  case 2: return 'イヌ';
  case 3: return 'イノシシ';
  case 4: return 'ネズミ';
  case 5: return 'ウシ';
  case 6: return 'トラ';
  case 7: return 'ウサギ';
  case 8: return 'タツ';
  case 9: return 'ヘビ';
  case 10: return 'ウマ';
  case 11: return 'ヒツジ';
 endswitch;
 }
 $kotoshi = Date("Y");
 echo getEto($kotoshi);
?>

getEtoという関数の中で、switch文を使っています。今年の「年」を取り出して、それを12で割った余りの数値で干支を割り当てていて、出力する書き方です。

同じような値が複数の条件となり処理を変えたい場合は、switch文の活用だと覚えてみてください。

PHP - foreach -

  • 2012-04-13 (Fri)
  • PHP
ミサイルが飛んでくるとか・・今日か?いつか・・。お騒がせです。
国際的に問題なのはもちろん、道義的に幼稚な思想は限界だろう・・。

久々に邦画「必死剣鳥刺し」という映画を見ました。一国の殿が、妾の女性の思うままになってしまい、その下で働く侍たちが苦悩を強いて仕舞う。
それを思って、妾を殺害した武士の話でした。見ていて、そんなに難しい内容ではなく、昔の武士やそれを取り巻く人たちの心情、振る舞い(しきたりや礼儀)がとても新鮮に思えました。
結末は言えませんが、必死剣という意味が最後に分かります。少しおススメです。

今回は、foreach文を紹介します。
第12回 foreach
このforeachは、配列を反復処理させるものです。for文は配列を処理することができないので、配列の内容を繰り返して処理する時にforeach文を使います。

配列を少し説明します。
変数は、一つの箱と仮定できます。例えば、$a="ONE"とすると、文字列「ONE」を変数aに代入します。つまり、文字列をaという箱の中に格納(保管)するということですが、複数の値を変数の中に格納することはできません。

もう少し噛み砕いた説明をすると、20名のクラスA(例:1年1組に20名)がいたとします。変数$classAに、20名の名前を保管したい場合に配列を使うことになります。
では、どうするかというと変数$classAに仕切りをすることになります。
タンスを例にすると分かり易いです。タンスは一つの箱と見なすことができます。上着を入れる引き出し、下着を入れる引き出し、タオルを入れる引出というように、引き出し(仕切り)があれば1つの箱の中に複数のものを入れることができます。
簡単に考えると、複数の値を一つの箱に入れる時はタンスを使う、つまり配列を使うと覚えると良いでしょうね。

どのように入れるかというと次のようになります。
$a = array(1,2,3);


foreachから脱線しましたが、foreach文は配列の値を反復処理する時に使う構文だという事になります。
では、サンプルコードを見てください。
<php
 $a = array(1,2,3,4,5);
 foreach($a as $value){
  echo $value."<br>";
 }
unset($value);
?>

結果は、1から5までを表示します。これは、for(i=1;i<=5;i++)で変数iを出力させるものと同じ処理となります。
foreachの書式は以下のようになります。
 foreach(配列変数名,インデックス,値){
  処理文
 }


また、以下のような使い方も良く行います。
<php
 $a = array(A,B,C,D,E);
 foreach($a as $key=>$value){
  echo "key$key"." の値は$value<br>\n";
 }
?>

上の形式は、各反復で現在の要素のキー(インデックス)を変数$keyに代入するという書き方です。
20120413-p01.jpg
一般には配列を定義する記述として次のようにする場合があります。
$a = array(
 "1"=>"A",
 "2"=>"B",
 "3"=>"C"
);

意味は、インデックス(キー)の「1」には「A」を格納、「2」には「B」を格納・・ということです。
$key=>$valueというのは、インデックス(キー)は変数$key、値は変数$valueを使用するということです。

配列とforeachも、けっこう使用する機会が多いですので、しっかりと覚えておきます。
  

PHP - for -

  • 2012-04-11 (Wed)
  • PHP
4月も3分の1が終わりました。春も考えてみれば、短く感じます。

さっそく、PHPの続きを書いていきます。
前回、繰り返し処理のWhileを紹介しましたが、繰り返し処理で頻繁に利用されるfor文を紹介します。

第11回 for
for文はループ処理でも複雑なループになり、記述方法にもいろいろあるようです。
書式は以下のようになります。
for (初期値;条件;ステップ)
 処理文

構造はいたって簡単です。初期値は、ループ開始時に無条件で実行されます。そして、各繰り返しの開始時に条件が評価され、条件が満たされるとTrueとなりループが継続されます。
条件が満たされていないとFalseとなり、ループは終了します。
また、ステップは各繰り返しの後に評価されます。このステップというのは、数値の加減を表します。

最もシンプルな例をあげてみます。結果は、1から10までの数値が表示されます。
<?php
for($i=1;$i<=10;$i++){
 echo $i."<br>";
}
?>

変数iの最初の値は1で、この変数が10以下になるまでループ(繰り返し)を行います。そして、処理を繰り返す度に変数iに1を加算して、1から10までカウントしていることになります。

for文の各式は空にすることも可能です。例えば、条件の式を空にして、この条件を処理文の中でif文を使って行えます。
<?php
for($i=1;;$i++){
 if($i >10){
  break;
 }
 echo $i."<br>";
}
?>

breakは、処理を強制終了させる文で、変数iが10より大きい数字になると処理を終了します。

また、すべての式を省略した書き方は以下のようになります。
<?php
$i = 1;
for(;;){
 if($i >10){
  break;
 }
 echo $i."<br>";
 $i++;
}
?>

ループの前に変数の初期値を設定しておき、ループ内の処理文の中に、条件とステップと式を記述しておけば、上のようにfor文の式は空でも構いません。

特殊な書き方もあり、その例が下の書き方になります。
<?php
for($i=1,$j=0;$i<=10;$j+=$i,print $i."<br>",$i++);
?>

式の中に処理内容も記述しているのが特徴です。シンプルですが、複雑な処理や見た目からして分かりにくい構造かもしれません。

応用的な使い方もできます。
<?php
$cols = 5;
echo "<table><tr>";
for($i = 0;$i < 10;$i++){
 echo "<td>" . $i . "</td>";
 if(($i+1) % $cols == 0){
  echo "</tr></tr>";
 }
}
echo "</tr></table>";
?>

20120411-p01.jpg

for文もループ(繰り返し)処理では良く利用するものです。しっかりと覚えておきたいですね。

PHP -While-

  • 2012-04-09 (Mon)
  • PHP
さくらも満開。だいぶ散っている光景も見られます。

まだ、朝晩は寒さが残りますが、昼間は過ごしやすいですね。風がなければ、絶好のお出かけモードです。各地でいろいろなイベントが開かれているようで、行楽盛んです。

まぁ~、ガソリンがかなり値上がりしているようで、遠出は控えている方が多いようです。イラン情勢などの影響で値上がりしているそうですが、円高なのにガソリンが安くならないのは何ででしょうか?
いつも、疑問に思っていることです・・・。

さて、今日は制御構文のWhile文を紹介します。
第10回 While
Whileは、繰り返し処理を行いたい時に利用します。基本構文は以下のようになります。
 
While(条件式)
  処理文

While文の条件式の値は、TrueまたはFalseとなり、Trueの時に、処理文が実行されます。
このWhileは「~の間」という意味ですから、条件の値を満たしている間は処理を繰り返し、条件の値がFalseになった時に、このWhile文から抜け出す(繰り返し処理を終了)ことになります。

簡単なサンプルは以下のようになります。これは、1から10までの数字を出力させるスクリプトです。
<php
 $i = 1;
 while ($i<=10){
  echo $i++ . "<br>";
 }
?>

このWhile文の特徴は、繰り返し処理の前に条件が記述されている点です。ということは、はじめから条件を満たさない場合は、何も処理されないことになります。
例えば、次のように記述したとします。
<php
 $i = 1;
 while ($i<1){
  echo $i++ . "<br>";
 }
?>

コードを見てもらうと分かりますように、$iに「1」を格納して、While文の条件で、「$iが1より小さい場合」となるので、この条件を満たさないことになります。
よって結果はwhile文の処理を1回も行わないで終了します。

Whileには、もう一つの構文do-while文が用意されています。簡単なサンプルを見てください。処理内容は、先ほどと同じにしています。
<php
 $i = 1;
 do{
  echo $i++ . "<br>";
 }while ($i<=10);
?>

条件式が最後にあることがポイントです。よって、必ず1回は処理を行ってから条件式をチェックすることになります。

下のコードを見てもらうと分かるように、$iに「1」を格納して、その次にdoを実行し、「1」を出力します。
<php
 $i = 1;
 do{
  echo $i++ . "<br>";
 }while ($i<1);
?>

一度出力した後に条件while($i<1)をチェックし、条件を満たさないので、そこでWhiel文から抜け出すことになります。

先ほどのWhile条件を最初に記述した時は何も出力されませんでしたが、最後に条件を記述した時は、必ず1回は処理が行われることになります。

使い道によって、いろいろと工夫できそうなものになりますね。
while文は、ある条件によって処理を繰り返す、繰り返さないというように覚えてみてください。もっともシンプルな構文かもしれません。

PHP - 制御構造 IF -

  • 2012-04-03 (Tue)
  • PHP
4月に入りました。桜もだいぶ開花したようで、花見をしている人も見かけます。
桜は日本を代表する花です。毎年思いますが、とても気持ち良くしてくれます。
卒業、新年度、始まりという印象を与え、気分を新たにしてくれる花だと思います。

ただ、桜の終わりは地面の掃除が大変です。しかも、雨の後は最悪です。
掃除をする方、ご苦労様です。^^;

今日から、PHPの制御構造に関する構文を紹介します。最初は、頻繁に使われるIF構文です。

第9回 IF
PHPスクリプトは、一連の式から成り立ちますが、その式には代入、関数コール、条件、ループなどがあります。通常、式の終わりはセミコロン(;)で終了します。
そして、式を中括弧(ブレス)「{ }」によりグループ化して、大きな式にすることができます。

IFは、最も重要な機能の1つで、命令の分岐処理(条件処理)が可能です。
IF構文のフォーマットは以下のようになります。
<?php
 if (条件)
  処理式;
?>

条件の式は、True、Falseの論理値で評価されます。つまり、2択という概念です。
条件に合致している(True)の場合に、処理式が実行され、条件に合致していない(False)の場合は、処理式を実行しません。

例えば、次のコードを見てください。
<?php
 $a = 5;
 $b = 3;
 if($a > $b)
  echo "aはbよりおおきい<br>";
?>

$aに5、$bに3を代入し、IF構文で条件文で処理を分けています。もし、$aが$bの値より大きい場合は、「aはbよりおおきい」と表示しなさいという意味になります。
という事は、$aが$bの値より小さい場合は、何も表示されないことになります。

では、次のコードを見てください。
<?php
 $a = 5;
 $b = 3;
 if($a > $b){
  echo "aはbよりおおきい<br>";
  $b = $a;
 }
 echo $b;
?>

コードの内容はほとんど同じですが、違うところは処理式が2つあることです。条件によって複数の処理を行いたい場合は、中括弧を使ってグループ化します。
最初のコードは処理が1つでしたので、中括弧を使っていません。
また、IFは、他のIF文の中に無限に入れ子にできます。

条件を満たさない時に、ある処理を行いたい場合もあります。条件を満たしていれば、Aの処理を、条件が満たされていない場合はBの処理を行わせタイ場合は、「else」を使います。
elseは、IF文における式の値がFALSE(偽の場合)にある式を実行できるように拡張できるものです。
では、次のコードを見てください。
<?php
 $a = 5;
 $b = 8;
 if($a > $b){
  echo "aはbより大きい";
  }else{
  echo "aはbより大きくない";
 }
?>

$aが$bより大きい場合は最初の処理を、そうでなければelseの下の処理を行います。
つまり、else文はIF式がFALSEと評価された時のみ実行します。

IF文は3つ以上の処理に分岐することもできます。その場合は、elseif文を使用します。
次のコードを見てください。
<?php
 $a = 5;
 $b = 5;
 if($a > $b){
  echo "aはbより大きい";
  }elseif($a == $b){
  echo "aとbは同じ";
  }else{
  echo "aはbより小さい";
 }
?>

このコードは、$aと$bを比較して、$aが$bより大きい場合、$aと$bが等しい場合、そしてそれ以外というように3つの処理に分けています。複数の条件に分岐したい場合は、elseifを利用します。

単純な処理であれば次のサンプルコードのようにも記述できます。
<?php
$a = 3;
if($a == 1){ echo "数値は1です。";}
elseif($a == 2){ echo "数値は2です。";}
elseif($a == 3){ echo "数値は3です。";}
elseif($a == 4){ echo "数値は4です。";}
elseif($a == 5){ echo "数値は5です。";}
else{ echo "1から5の間の数値でないです。";}
?>


IF文をもう少し簡略に書きたい場合は、コロン(:)をを使います。この場合、必ず最後はendif;を記述します。次のコードを見てください。
<?php
 $a = 3;
 if($a == 1):
  echo "aは1です";
  echo "......";
 elseif($a == 2):
  echo "aは2です";
  echo "!!!!!!";
 else:
  echo "aは1でも2でもない。";
  echo "w(..)w";
 endif;
?>


IF文はいろいろな記述ができます。単純でシンプルな記述の方が見やすく、実行速度も速くなります。
IF文は重要な構文ですし、使わないということはほとんどないと言っても過言ではありません。とりあえず、しっかりと覚えましょう。

More...

Home > Archives > April 2012

Search
Feeds

Page Top