PHP講座(3)!
変数・配列・制御構文・関数
この教材ではすべてのプログラムに共通する
基本的な概念を学びます。
文法みたいなものだと思ってください。
PHPのデータ型
10.4.18 (C) 株式会社破滅派
2
1.文字列	
  
‘’(シングル・クオート)か””(ダブル・クオート)で囲む。日本語でおk。	
  
2.数値	
  
半角英数でそのまま入力。絶対に全角を使わない!	
  
3.配列	
  
色々な値を覚えておく出席簿みたいなもの。(後述します)	
  
4.真偽値	
  
ほんと(true)か嘘(false)か	
  
5.オブジェクト	
  
クラスの実体(この講座の中盤で説明します)	
  
6.リソース	
  
データベースに接続する時などに使う	
  
7.NULL	
  
ヌルと読む。「無」を意味する値。こんなの→	
  
基
本
難
し
い
か
ら
あ
と
で
PHPのデータを扱う方法
10.4.18 (C) 株式会社破滅派
3
PHPでデータを扱うとき、	
  
同じものを何度も処理する場合があります。
こういう時、便宜的に名前を付けておくと便利です。
変数をつかいます。
変数入門
10.4.18 (C) 株式会社破滅派
4
$hoge	
  =	
  “fuga”;
【変数を宣言する構文】
=はイコールじゃな
くて「代入」
$マークで始まるの
が変数。	
  
もちろん半角英数。	
  
変数によって名付け
たい値。	
  
型はなんでもOK。	
  
変数というのは値につけ
られる名前のことです。
複数のデータを扱う
10.4.18 (C) 株式会社破滅派
5
複数の似たようなデータを扱うことがあります。
配列をつかいます。
配列
10.4.18 (C) 株式会社破滅派
6
$children	
  =	
  array(“綾波レイ”	
  ,	
  ”式波・アスカ・ラングレー”	
  ,	
  ”碇シンジ”);
【配列を宣言する構文】
変数が名前なら、配列は出席番号のついた名簿のような役割を果たします。	
  
左から順に番号が振られます。	
  
echo	
  $children[0];	
   	
  //綾波レイ	
  
echo	
  $children[1];	
   	
  //式波・アスカ・ラングレー	
  
echo	
  $children[2];	
   	
  //碇シンジ	
  
echo	
  $children[3]; 	
  //undefined(定義されていません)
  配列の番号は0からスタートする。	
  
  配列の子要素には[]でアクセスする。
「カンマ」で区切
ります。
連想配列
10.4.18 (C) 株式会社破滅派
7
【連想配列を宣言する構文】
$evangelion	
  =	
  array(	
  “綾波レイ”	
  =>	
  “零号機”,	
  
	
   	
   	
   	
   	
  ”式波・アスカ・ラングレー”	
  =>	
  “弐号機”,	
  
	
   	
   	
   	
   	
  ”碇シンジ”	
  =>	
  “初号機”);
配列は番号による名簿のような役割でしたが、連想配列にはそれぞれの子要素に名前
があります。	
  
ちょうど、生徒想いの先生が生徒一人一人の名前を覚えているようなものです。	
  
「=>」で名前と値をペアに
し、配列同様、カンマで区
切ります。
echo	
  $evangelion[“碇シンジ”]; 	
  //初号機
  番号はなく、それぞれの子要素にキーがある。	
  
  配列の子要素には[“キー”]でアクセスする。
定数について
10.4.18 (C) 株式会社破滅派
8
【定数を宣言する構文】
define(“HOGE”,“FUGA”);
echo	
  HOGE; 	
  //FUGA
定数は変数と違い、一度つけたら変えられません。	
  
$から始まったりもしません。	
  
DB接続用パスワードなどに使われます。	
  
慣例としてすべて大文字で書きます。
定義済み変数と定義済み定数
10.4.18 (C) 株式会社破滅派
9
PHPはWebに特化したプログラミング言語なので、
色々なものがあらかじめ定義されています。	
  
これは車輪の再発明(同じことの繰り返し)を防ぐた
めです。	
  
  スーパーグローバル変数	
  
$_ではじまるものです。	
  
$_POST,	
  $_GET,	
  $_SERVER,	
  $_FILE…(どれも配列)	
  
$GLOBALSですべて参照できます。	
  
  定義済みの定数	
  
__FILE__,	
  __LINE___(前後にアンダースコア2連続)	
  
PHP_VERSION,	
  PHP_OS	
  
M_PI,	
  M_SQRT2	
  
$_GETも$_POSTも配
列だったんだ!
条件分岐とは?
10.4.18 (C) 株式会社破滅派
10
【条件分岐を何に使うのか?】
たとえば、ログインフォームを考えて見ます。	
  
ログイン名	
  
パスワード	
  
もし合ってたらログイン	
  
間違ってたら エラー 	
  
ユーザーが入力するもの	
  
条件分岐の構文
10.4.18 (C) 株式会社破滅派
11
if(条件){	
  
	
  //合っている時の処理	
  
}else{	
  
	
  //合っていない時の処理	
  
}	
  
{∼}を「ブロック」と呼びます
条件分岐の例「合計で10になる数値を入れなさい」
10.4.18 (C) 株式会社破滅派
12
//ユーザの入力した情報を取得	
  
$number1	
  =	
  $_POST[“number1”];	
  
$number2	
  =	
  $_POST[“number2”];	
  	
  
//二つの合計が10だったら	
  
if($number1	
  +	
  $number	
  2	
  ==	
  10){	
  
	
  echo	
  “合ってる”;	
  
}else{	
  
	
  echo	
  “間違ってる”;	
  
}	
  
でも、これだとYes/Noしかできない…
複雑な条件分岐
10.4.18 (C) 株式会社破滅派
13
//ユーザの入力した情報を取得	
  
$number1	
  =	
  $_POST[“number1”];	
  
$number2	
  =	
  $_POST[“number2”];	
  	
  
//二つの合計が1000より大きかったら	
  
if($number1	
  +	
  $number	
  2	
  >	
  1000){	
  
	
  echo	
  “大きい”;	
  
//二つの合計が100より小さかったら	
  
}elseif($number1	
  +	
  $number	
  <	
  100){	
  
	
  echo	
  “小さい”;	
  
//それ以外	
  
}else{	
  
	
  echo	
  “普通”;	
  
}	
  
これでいくらでも条件をつけることができる!	
  
反復処理とは?
10.4.18 (C) 株式会社破滅派
14
【コンピューターが得意なものは?】
どんな処理でも「繰り返し」というものはあります。	
  
まったく同じではなくても、「似たような処理」を繰り返すことはよ
くあります。	
  
それを一々プログラミングする必要があるでしょうか?(暇ならいい
ですけど…)	
  
そう、コンピューターが一番得意なのは、「機械的な反復作業」です。
言い換えれば、「反復処理はできる限りコンピューターにやらせるべ
き」なんです。	
  
毎日同じことなん
てやってらんねー
よ….
反復処理に向いているもの
10.4.18 (C) 株式会社破滅派
15
【反復処理に向いたデータ型=配列】
配列は複数の要素からなる出席簿のようなものだと説明しました。	
  
配列のインデックスは0から始まる	
  
↓	
  
1∼10 = 0∼9	
  
↓	
  
一番左を0と考えると、並ぶべき位置は(自分の番号×距離)	
  
出席番号1から10の奴、
左から右に並べ!
反復の構文
10.4.18 (C) 株式会社破滅派
16
for(初期条件;終了条件;毎回行われる処理){	
  
	
  //毎回行われる処理	
  
}	
  	
  
{∼}を「ブロック」と呼びます
反復の例:for文
10.4.18 (C) 株式会社破滅派
17
$member	
  =	
  array(“その1”,	
  “その2”,	
  “その3”,	
  “その4”,	
  “その5”,	
  “その6”,	
  “その7”,	
  “その8”,	
  “その9”,	
  “その10”);	
  
for($i	
  =	
  0;	
  	
  $i	
  <	
  10;	
  	
  $i++){	
  
	
  $position	
  =	
  $i	
  *	
  10; 	
  	
  
	
  echo	
  “{$member[$i]}は{$position}にいます。”;	
  
}	
  	
  
/*	
  
その1は0にいます 	
   	
  その6は50にいます	
  
その2は10にいます 	
   	
  その7は60にいます	
  
その3は20にいます 	
   	
  その8は70にいます	
  
その4は30にいます 	
   	
  その9は80にいます	
  
その5は40にいます 	
   	
  その10は90にいます	
  
*/	
  
※何回繰り返せばいいか、あらかじめわかっていない場合は?	
  
初期値は0
$iが10より小さ
い限りは実行
繰り返しのたびに$iに1を加算
反復の例:foreach文
10.4.18 (C) 株式会社破滅派
18
$member	
  =	
  array(“JR”	
  =>	
  130,	
  “小田急”	
  =>	
  “120”,	
  “井の頭”	
  =>	
  110,	
  “営団”	
  =>	
  160,	
  “都営バス”	
  =>	
  200);	
  
foreach($member	
  as	
  $k	
  =>	
  $v){	
  
	
  echo	
  “{$k}の初乗りは{$v}円です。”;	
  
}	
  	
  
/*	
  
JRの初乗りは130円です。	
  
小田急の初乗りは120円です。	
  
井の頭の初乗りは110円です。	
  
営団の初乗りは160円です。	
  
都営バスの初乗りは200円です。	
  
*/	
  
【for文と比べて…】	
  
連想配列を扱うのに便利 	
   	
   	
   	
  いちいち要素の数を調べなくていい	
  
なんかかっこいい 	
  	
  
要素のキー
要素の値(値だけでもいい)
反復を途中でやめる場合
10.4.18 (C) 株式会社破滅派
19
$girls; 	
  	
  
/*	
  
この配列は30個の要素を持っています。値は「付き合ってもいい」または「付き合い
たくない」です。	
  
あなたはすさまじいモテ男なので、全員に告白を試み、何人目にふられるかを試しま
す。	
  
*/	
  
$number_of_confession	
  =	
  0; 	
  //告白回数	
  
for($i	
  =	
  0;	
  	
  $i	
  <	
  30;	
  	
  $i++){	
  
	
  $number_of_confession	
  =	
  $i; 	
  	
  
	
  if($girls[$i]	
  !=	
  “付き合ってもいい”	
  ){	
  
	
   	
  break;	
  
	
  }	
  
}	
  
echo	
  $number_of_confession;	
  
※告白回数を何人まで伸ばせるかは、$girls次第!	
  
breakで強制的にループを終了
組み込み関数
10.4.18 (C) 株式会社破滅派
20
人間の考えることというのは、大体同じです。	
  
これまで、数多くの人が同じようなことを考えてきました。
だいたいの関数はすでにあります。
パスワードの文
字数とか数える
のめんどくせーな
そういうのあるよ
関数は自分でも作れます
10.4.18 (C) 株式会社破滅派
21
function	
  hoge($foo,	
  $bar){	
  
	
  //ここでなんか処理を行う	
  
	
  return	
  $fuga;	
  
}	
  
$var1	
  =	
  hoge(1,	
  2);	
  
$var2	
  =	
  hoge(10,20);
引数。なくてもいいし、なんこあってもいい。関数名関数宣言
戻り値(なくてもいい)
ちなみに…
10.4.18 (C) 株式会社破滅派
22
PHPには4000個近い組み込み関数があります。	
  
そのほとんどは元々誰かが作ったものだったり、	
  
他の言語から移植したものだったりします。
プログラムの極意は、	
  
「いかにして関数を作るか」	
  
にあるといっても過言ではありません。

03 var array_flow_func