PHP
入門
# 2
アジェンダ
Webの基礎知識
開発環境
PHPに触れてみよう
PHPの基本
変数と型
演算子
制御構造と関数
データのやりとり
オブジェクト指向
基礎知識
抽象クラス
インターフェイス
例外
データベース
基礎知識
SQL
PDO
セキュリティ
Web
の基礎知識
# 4
Webの基礎知識
Webの仕組み
クライアントサーバモデルに基づくシステム
・ ウェブブラウザにURLが入力される(もしくは外部リンクがクリックされる) ・ DNSによってURLがIPアドレスに変換され、URIのスキーム に従い接続される (主にHTTPで接続) ・ ページを構成するファイルが要求元に送られる ・ 受信側(クライアント)は受け取ったファイルにしたがってページを生成し表示を行う クライアント サーバ送信
受信
受信
送信
要求
応答
HTTP
Webの基礎知識
Webアプリケーションとは?
ウェブの機能や特徴を利用したアプリケーション
PHPやRubyといったWebサーバ上で動作するス
クリプト言語を利用して開発することが多い
動的にコンテンツを生成
サーバ~クライアント間をHTTPで通信
具体的には
ブログ、SNS、掲示板、オンラインショップ
WIKI
、オークション etc・・・
# 6
Webの基礎知識
用語解説:HTML
(HyperText Markup Language )
ウェブ上のドキュメントを記述するための
マークアップ言語
他のドキュメントへのハイパーリンクを設
定できるハイパーテキストで画像・リス
ト・表などの高度な表現力を持つ
W3Cによる標準規格であるが、最近では
後継規格であるXHTMLへの置き換えが進
められている
Webの基礎知識
用語解説:PHP
(PHP: Hypertext Preprocessor )
動的にHTMLデータを生成することが可能
→サーバ~クライアント間でデータの受け渡しを行う
Apache、IISなどWebサーバ上で動作する
フレームワークやライブラリが多数存在
CGI、FastCGI、サーバのモジュールとして
動作可能
イスラエルのZend Technologies社が
コアエンジンを開発
# 8
Webの基礎知識
PHPはスクリプト言語である
インタプリタ方式
実行する度にオペコード(機械語)に変換
コンパイル処理が不要
Zend Engineが自動的にコンパイル
スクリプトをサーバに配置するだけ
Try & Errorが容易
プログラムを作成/変更してから実行するまでの手間がなく
開発者にとって利便性が高い
Webの基礎知識
用語解説:CGI
Common Gateway Interfaceの略
サーバプログラムと外部プログラムとの連
携法の取り決め
様々な言語に対応
PHP/Perl/Java/Python/Ruby/C etc
…
※mod_php、mod_perl、Java ServletはCGIとは
仕組みが違う。
# 10
Webの基礎知識
用語解説:HTTP
HyperText Transfer Protocolの略
Webサーバとクライアントとの間で通信を
行う際に用いるプロトコル
HTML・XMLで記述されたハイパーテク
ストの転送が主な目的だが、画像・動画な
ど、様々なデータの転送に用いられる
状態保持の為の機構であるCookieを使用
可能
Webの基礎知識
用語解説:HTTPS
HTTP + “Secure”
暗号化する事でセキュア(安全)な状態にする
SSL (Secure Socket Layer)で暗号化
サーバの認証と通信の暗号化により安全性
を確保
復元のための解析に膨大な時間を要するため、
# 12
クライアントサイドスクリプト
クライアント側動的コンテンツの仕組み
Java ScriptなどWebブラウザで動作するス
クリプト
・ ページ全体は、WebサーバよりWebブラウザに送られる。 ・ Java Scriptで記述された部分が操作に応じて動作する ・ 一部のデータをサーバ側にデータを要求するときはajaxで通信を行う。 ・ Webページ全体を遷移する場合には、通常のhttpリクエストを送る Webブラウザ Java Script サーバ送信
受信
要求
応答
ajax
モバイルアプリ
モバイルの仕組み
ネイティブアプリとWebサーバの連携
・ ネイティブアプリは、クライアント(スマホ/タブレット)にダウンロードされている。 ・ ネイティブアプリが、Webサーバからデータを取り出す際には、httpdリクエストを 送信する。 ・ ネイティブアプリは、サーバからのレスポンスを受け取り処理を行う。 ネイティブアプリ サーバ送信
受信
受信
送信
要求
応答
HTTP
PHP
に触れてみよう
PHPに慣れ親しむためにも、まずは学習の前に
実際にPHPを触ってみましょう。
誰でも簡単にプログラミングできる言語だという
事を肌で感じて下さい。
PHPに触れてみよう
次のスクリプトを実行してみましょう
Zend Studioのローカルデバッグ機能を使って
試してみましょう
[F5]キーで編集中のスクリプトを実行できます
<?PHP phpinfo(); ?># 16
PHPに触れてみよう
このような画面になりましたか?
アウトプット領域上の[HTML]タブをクリック
PHPに触れてみよう
次のスクリプトを実行してみましょう
<?PHP
"
こんにちは、世界!
"
;
?>
# 18
PHPに触れてみよう
このような画面になりましたか?
PHPに触れてみよう
まずはプログラムを動かしてみよう!
プログラムを実行し、結果を見ることが学習
の近道です
全ての機能を憶える必要はありません
Zend Studioで手軽にPHPを楽しもう!
デバッグ機能など一般的なエディタにはない
便利な機能が充実しています
ネット環境が無い状態でも学習出来ます
PHP
の基本
PHPを記述する上で、基本となるルール、文法
を学習します
PHPの基本
基本ルール
基本ルール
「 <?php 」と「 ?> 」で囲われたブロックがPHP
スクリプトとして認識される
HTMLファイルの中に埋め込む形でも記述可能
ファイル保存時に拡張子は 「.php 」とする
<html> <head><title>step1</title></head><body> <?php //(ここにPHPのコードを記述します)print ”hello world ! ”; ?>
</body> </html>
# 22
コメント
の書式
「//」の後に記述する
<?php //ここにコメントを記述 print ”//この場合は・・・”; ?>複数行の場合は「/* ~ */」で囲う
<?php /* 途中で改行を入れても・・・ OK! */ ?>PHPの基本
基本ルール
演習
以下のコードを入力し、Zend Studioで実行して
みましょう
PHPの基本
基本ルール
<html> <title>step2</title> <body> <table border="1"> <tr> <?php print "<td>1+1</td>"; ?> <td> = </td> <td> <?php print(1+1); ?> </td> </tr> </table> </body> </html># 24
PHPの基本
変数と型
変数とは
イメージは・・・
なんでも入れられる便利な「箱」
実際は・・・
変数を宣言することにより、PCのメモリ上に
「値」を保持しするための領域を作る
変数 数値 文字列 配列 オブジェクト 画像PHPの基本
変数と型
変数の使いかた
「$」ではじめる
使える文字は英数字、アンダースコアのみ
頭に数字は使えない
例:
$var
・・・・OK
$var_01
・・・・OK
$1_var
・・・・
NG
# 26
PHPの基本
変数と型
型の種類
文字列 (string)
整数 (int)
浮動小数点 (float)
論理型 (boolean)
配列型 (array)
オブジェクト型 (object)
リソース型 (resource)
ヌル型 (null)
※ PHPは型を意識しなくても記述できる言語ですが
型の概念を知っておくことはとても重要です
PHPの基本
変数と型
文字列型(string)
文字の集合体を表現する変数
0文字以上の文字列を格納
$zend = 'zend is PHP company';
$php = 'PHP is ¥'scripting language¥' '; $name = 'my name is ¥¥zeev suraski¥¥';
シングルクォートによる記述
# 28
PHPの基本
変数と型
$a = "a¥n¥tb¥n¥t¥tc"; $b = "$a¥nd"; ダブルクォートによる記述 エスケープシーケンスが利用可能 変数が有効になる ヒアドキュメントによる記述 「<<<EOD」~「EOD」までの間を文字列として認識 $str = <<<EOD これが ヒアドキュメント です EOD; \n 改行 \r 復行 \t 水平タブ \\ 円マーク \$ ドル記号 \" 二重引用符 エスケープシークエンス一覧PHPの基本
変数と型
整数型(int)
32ビット符号付き整数を表現する変数
代入可能な値: -2147483648~2147483647 $a = 100;// 10進数 $a = 0765;// 8進数・・・0を付けると8進数として扱われる $a = 0xff;// 16進数・・・0xを付けると16進数として扱われる $a = 2147483647; //+1して下記実行結果の変化を見る var_dump($a);# 30
PHPの基本
変数と型
浮動小数点型(float)
次のケースで使用する
整数の上限以上の値
小数点以下の値を扱う時
$a = 1.2; $a = 1.2e3;// 1.2 x 1000 $a = 1.2e-3;// 1.2 x 0.001PHPの基本
変数と型
配列型(array)
配列とは・・・
複数の値を持つことが出来る変数
値にユニークなインデックスを付けることができる
イメージとしては・・・
配列 このようなスプレッドシートのデータ構造 をそのまま格納することができる# 32
PHPの基本
変数と型
実際に値を格納してみましょう
$gv9[] = '柴田'; $gv9[] = '土井'; $gv9[] = '王'; $gv9[] = '長嶋'; $gv9[] = '末次'; $gv9[] = '高田'; $gv9[] = '黒江'; $gv9[] = '森'; $gv9[] = '高橋'; print_r($gv9); 変数名[] = 値 変数名 = array(値1,値2,・・・) $gv9 = array('柴田' ,'土井' ,'王', '長嶋','末次','高田','黒江','森','高橋 '); print_r($gv9);PHPの基本
変数と型
連想配列
「キー」に文字列を指定したもの
$gv9['中'] = '柴田'; $gv9['二'] = '土井'; $gv9['一'] = '王'; $gv9['三'] = '長嶋'; $gv9['右'] = '末次'; $gv9['左'] = '高田'; $gv9['遊'] = '黒江'; $gv9['捕'] = '森'; $gv9['投'] = '高橋'; print_r($gv9); 変数名[キー] = 値 変数名 = array(キー =>値1,・・) $gv9 = array( '中' => '柴田', '二' => '土井', '一' => '王', '三' => '長嶋', '右' => '末次', '左' => '高田', '遊' => '黒江', '捕' => '森', '投' => '高橋' ); print_r($gv9);# 34
PHPの基本
変数と型
論理型(boolean)
真偽を表現する型
TRUE: 真
FALSE: 偽
比較演算子
の結果は全て論理型
$a = true; print $a . "¥n"; var_dump($a); $a = false; print $a . "¥n"; var_dump($a);PHPの基本
変数と型
オブジェクト型(object)
クラスのインスタンス(実態)
クラスオブジェクトの設計図
クラスで定義したメソッドを使える
メソッドクラスに紐付いた関数
メンバ変数を持てる
メンバ変数
オブジェクトの中に格納されている変数
# 36
PHPの基本
変数と型
リソース型(resource)
外部リソース(情報資源)への参照を保持する
特殊
な変数
他の型からの変換は不可能
ファイル/ディレクトリ
データベース(接続, ステートメント, etc
…
)
グラフィック(GD, ImageMagik, etc
…
)
$fp = fopen("test.txt", "r"); var_dump($fp); fclose($fp);PHPの基本
変数と型
ヌル型(Null)
値が何も無いことを示す特殊な変数
以下の場合にNullと見なされる
「Null」が代入されている場合(下記サンプル参照)
値が何も無い場合
変数が存在しない場合
unset()関数で変数が破棄されている場合
$var = null; var_dump($var);# 38
PHPの基本
演算子
演算子
演算子の種類
代数演算子
代入演算子
比較演算子
加算子/減算子
文字列演算子
PHPの基本
演算子
算術演算子
数値を足したり引いたりするための演算子
優先順位も含め算数と全く同じ
例
説明
詳細
-$a 負にする $aの符号を反転したもの $a + $b 加算 $aと$bの和 $a - $b 減算 $aと$bの差 $a * $b 乗算 $aおよび$bの積 $a / $b 除算 $aおよび$bの商 $a % $b 乗余 $aを$bで割った余り# 40
PHPの基本
演算子
算術演算子
演習:変数に値を代入し、計算してみましょう
値、演算子を変更して演算結果を確認しましょう
$a = 1; $b = 2; print ($a - $b);PHPの基本
演算子
代入演算子
変数に値若しくは演算結果を代入する演算子
例
説明
$a = 3; $aに3を代入 $a += 5; $aに5を加算 $b="Hello"; $bに文字列を代入 $a = 10; $a += 2; print ($a);# 42
PHPの基本
演算子
比較演算子
2つの値を比較する演算子。演算結果はboolean。
例
説明
詳細
$a == $b 等しい $a === $b 等しい 型比較も行う $a != $b 等しくない $a <> $b 等しくない ($a!=$bを推奨) $a !== $b 等しくない 型比較も行う $a = 1; $b = 2; var_dump($a===$b);PHPの基本
演算子
比較演算子(続き)
2つの値を比較する演算子。演算結果はboolean。
例
説明
$a < $b より少ない $a > $b より多い $a <= $b より少ないか等しい $a >= $b より多いか等しい $a = 1; $b = 1; var_dump($a<=$b);# 44
PHPの基本
演算子
加算子・減算子
値を+1または-1する演算子。
例
説明
詳細
++$a 前置加 算子 参照前に$aを+1 $a++ 後置加 算子 参照後に$aを+1 --$a 前置減 算子 参照前に$aを-1 $a-- 後置減 算子 参照後に$aを-1 <?php $a = $b = 1; print ++$a; print "¥n"; print $a; print "¥n"; print $b++; print "¥n"; print $b; print "¥n"; ?>PHPの基本
演算子
文字列演算子
文字列同士を結合する演算子。
例
説明
詳細
$b = $a . ",There!"; 結合演算子 「.」 によって文字列 を結合する $b .= "There!"; 結合代入演算子 左辺の値に文字列を結 合する $a = "Hello"; $b = $a . ",There!"; print $b;# 46
PHPの基本
演算子
論理演算子
複数の条件式を論理的に結合する演算子です
例
説明
詳細
&& 論理積 双方がTRUEの場合にTRUEを返す || ( or ) 論理和 いずれかがTRUEの場合にTRUEを返す xor 排他的論理和 いずれかがTRUEでかつ双方ともTRUE でない場合にTRUEを返す ! 否定 式がFALSEである場合にTRUEを返す $a = true; $b = false; var_dump($a xor $b);PHPの基本
定数
define("HOSTNAME", "ZEND1"); define("HOSTNAME", "ZEND2"); print (HOSTNAME);定数
不変の値を保持する
再定義はできない
使える文字は英数字、アンダースコアのみ
スコープ(後述)規則がない
配列は格納できない
# 48
PHPの基本
定数
マジック定数
自動的に定義される定数
使われ方によって値は変化する
名前
説明
__LINE__ 実行中の行番号 __FILE__ 実行中ファイルのフルパスとファイル名 __FUNCTION__ 関数名 __CLASS__ クラス名 __METHOD__ クラスのメソッド名PHPの基本
制御構造と関数
制御構造とは
…
プログラムの流れを制御するもの
制御構造の種類
順次構造
上から順に処理を行う構造
選択構造
式の結果に応じて処理を分岐する構造
反復構造
式の結果に応じて処理を繰り返す構造
# 50
PHPの基本
制御構造と関数
if
条件に一致した際(TRUEの場合)、処理を実行します
$a = 1; if( $a == 1 ){ print '$aには1が代入されています'; } if ( 条件式 ) { 処理 }PHPの基本
制御構造と関数
else
条件に一致しない場合(FALSE)、処理2を実行し
ます
$a = 1; if( $a >= 10 ){ print '$aは10以上です'; }else{ print '$aは9以下です'; } if ( 条件式 ) { 処理1 } else { 処理2 }# 52
PHPの基本
制御構造と関数
elseif
条件式1に一致せず(FALSE)、且つ条件式2に一
致した場合(TRUE)、処理2を実行します
$a = false; $b = true; if($a){ print "Hello"; }elseif($b){ print "bye"; } if ( 条件式1) { 処理1 } elseif( 条件式2){ 処理2 }PHPの基本
制御構造と関数
while
条件式の結果が(TRUE)のとき、処理を繰り返します
$i = 1; while( $i <= 10 ){ echo $i++ . "¥n"; } while( 条件式 ) { 処理 }# 54
PHPの基本
制御構造と関数
do
…
while
条件式の結果が真(TRUE)のとき、処理を繰り返し
ます
処理を実行した後で条件式を評価します
$i = 0; do{ print ++$i . "¥n"; } while( $i <= 10 ); do{ 処理 while( 条件式 )PHPの基本
制御構造と関数
for
開始時の処理を無条件で実行します
条件式の結果が(true)の時、処理を実行します
実行後の処理を行い、条件式の結果が(false)にな
るまでループ処理を継続します
for( $i=1; $i<=10; $i++ ){ echo $i . "¥n";
}
for( 開始時の処理; 条件式; 実行後の処理 ){ 処理
# 56
PHPの基本
制御構造と関数
foreach
配列要素に対する反復構造
配列の要素が$value(任意の名称)に代入されてい
きます
二種類の構文があります
$a = array("php", "perl", "java"); foreach($a as $val){ print $val . "¥n"; } foreach ( 配列 as $value){ 処理 }
PHPの基本
制御構造と関数
foreach (構文)
連想配列をループ処理する際、非常に有効です
要素のキーが $key に代入されます
$os = array("opensource" => "linux", "ms" => "windows", "apple" => "osx"
);
foreach( $os as $key => $val ){ print $key. "::" .$val."¥n"; }
foreach ( 配列 as $key => $value){ 処理
# 58
PHPの基本
制御構造と関数
break
その時点で反復構造(while, do-while, for, foreach )
とswitch(後述)構造を抜けます
for($i = 1; $i < 50; $i++){ if($i == 25){ break; } print $i . "¥n"; }PHPの基本
制御構造と関数
continue
反復構造の残りの処理をスキップし、次の処理を
実行します
$i = 0; while($i < 10){ $i++; if($i == 5){ continue; } print "$i" . "¥n"; }# 60
PHPの基本
制御構造と関数
switch
一つの変数を複数の値と比較し、それぞれ異なる
処理を行わせる制御構造
$a = 1; switch( $a ){ case 0:print 'very good'; break;
case 1:
print 'good'; break;
case 2:
print 'not bad'; break; default: print '...'; } switch ( 条件式 ) { case a : 処理 a break; case b : 処理 b break; default : 処理 }
PHPの基本
制御構造と関数
return
スクリプトの実行を中止します
print "a¥n"; print "b¥n"; return; print "c¥n";# 62
PHPの基本
制御構造と関数
include・require
PHPスクリプトを読み込みます
// foo.phpが無いとwarningになります include "foo.php"; // bar.phpが無いとFATAL ERRORになります require "bar.php";PHPの基本
制御構造と関数
include_once・require_once
1度だけPHPスクリプトを読み込みます
2度目に実行しても再度読み込みは行いません
// foo.phpが無いとwarningになります Include_once "foo.php"; // bar.phpが無いとFATAL ERRORになります require_once "bar.php";# 64
PHPの基本
制御構造と関数
関数とは
…
処理を一まとめにしたもの
2種類
の関数が存在する
ビルトイン関数
PHPにデフォルトで組み込まれている定義
済みの関数
ユーザ定義関数
ユーザ自身が定義する関数
PHPの基本
制御構造と関数
ビルトイン関数
DB接続や文字列操作など多種にわたる関数が存在
例
文字列操作
strcmp, strstr, strcat, strlen, etc
…
DB操作
pg_connect, mysql_query, db2_prepare, etc
…
1000以上存在します
http://php.benscom.com/manual/ja/indexes.php#in
dex.functions
# 66
PHPの基本
制御構造と関数
ユーザ定義関数
「function」命令を使用して定義を行う
関数名の命名規則は変数と同じ
引数とは
関数に渡す値 ⇒ 処理を行ってほしい対象
戻り値とは
関数で処理を行った結果を自動的に返したもの
function
関数名
(引数) {
処理(
戻り値
)
}
PHPの基本
制御構造と関数
ユーザ定義関数
まずは簡単な関数を定義してみましょう
定義した関数を実行してみましょう
function foo(){ print 'こんにちは'; } foo();# 68
PHPの基本
制御構造と関数
ユーザ定義関数
引数と戻り値のある関数を定義してみましょう
定義した関数を実行してみましょう
function sale($teika){ $urine = $teika * 0.7; return $urine; } print "3割引!!¥t". sale(1500) . "円";PHPの基本
制御構造と関数
スコープ( 変数の有効範囲 )
関数内にある変数 ローカル変数
関数外にある変数 グローバル変数
2種類の変数は全く別の世界に存在する
$a = 1; function hoge(){ $a; print ($a + 1); } hoge();ローカル変数の
有効なエリア
グローバル変数
の有効なエリア
# 70
PHPの基本
制御構造と関数
スコープ( 変数の有効範囲 )
グローバル宣言することで、ローカル変数をグ
ローバル変数として扱うことが可能
$a = 1; function hoge(){ global $a; print ($a + 1); } hoge();データのやりとり
# 72
データのやりとり
入力フォーム
WebアプリケーションではHTMLのフォームによ
るデータのやりとりが非常に多く見られます
クライアント側
サーバ側
apache
PHP ① ブラウザの入力フォームに入力された値はHTTPプロトコルによってサーバに送信される。 ② サーバ側では値をPHPにより受け取り、ロジカルな処理を行う。 ③ PHPスクリプトの実行結果がクライアントに送られ、ユーザのブラウザ表示に反映される。①
③
②
データのやりとり
<html> <body>
<form action="post.php" method="post"> <table border = "1">
<tr>
<td>名前</td>
<td><input type="text" name="name"></td> </tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="送信"></td> </tr> </form> </table> </body> </html>
実際にプログラムを作ってみましょう
まず簡単な入力フォームを作成します( .htmlで保存 )
# 74
データのやりとり
データを受け取り、処理を行う
htmlの <form>タグのmethod属性を「post」で指定した場合、
PHPではスーパーグローバル変数(詳細は後述) $_POST で受け
取ることが出来る
フォームで送信した値は<input>タグのname属性で指定した名
称をキーとした$_POSTの連想配列に格納される
PHPスクリプトを作成し、実際にアウトプットを表示してみま
しょう
<?php $name = $_POST['name']; print "名前を受け取りました" . "<br />" . "$name"; ?>データのやりとり
スーパーグローバル変数
PHPスクリプトにアクセスした時点で自動的に
定義される変数
関数内であってもアクセス可能
値は連想配列として格納される
$_POSTもスーパーグローバル変数のひとつ
# 76
データのやりとり
$_POST
フォームからHTTP POST(HTTPのリクエス
ト)で送信された値が格納されます
<input type="text” name="hoge" > $_POST['hoge'] HTMLフォーム
ブラウザ 送信ボタンを押すとサーバにデータが
送信され、$_POSTに連想配列として 格納される
データのやりとり
$_GET
フォームからHTTP GET(HTTPのリクエスト)
で送信された値が格納されます
<input type="text” name="hoge" >
$_GET['hoge'] HTMLフォーム ブラウザ 送信ボタンを押すとURLに「クエリ」という 形でデータを付け加えて送信される $_POST同様に連想配列として格納される ブラウザのアドレスバー クエリ
# 78