WEBデザイン・開発講義WEB Design&Development Lecture
PHPプログラミングのコース概要
「PHPプログラミング」コース概要
- WEBデザイン・開発教室用の「PHPプログラミング」をする上のPHP文法と機能の体系を説明する内容です。
- PHPスクリプト言語の特徴は、「HTML」ドキュメントに特別なPHPタグ指定をして、PHPプログラムを実行させることができること。データベースやフォームからの入力内容の更新などを反映した「動的なページ」を作成することができます。
- PHPの基本的な文法を理解してプログラミング作成し、WEBアプリケーションを実行して、さまざまなWEBシステムを実現できることが習得目標です。
「PHPプログラミング」の概要、基本構文、基本文法と機能体系
「PHPプログラミング」の概要※画像クリックで拡大表示
- PHPスクリプト言語の特徴は、
- HTMLの表示内容を変更したり、入力内容により処理制御するなどのプログラム記述して実行させる言語で、処理の手順を記述したソースファイルを解釈してサーバー側で実行するインタープリタ言語です。(コマンドラインからも実行可能です。)
- PHPは、マークアップ言語の一種でプログラミングを可能としており、「HTML」ドキュメントに特別なPHPタグ指定(<と>で囲む)を埋め込んでプログラム実行させるものです。
- ソースファイルの拡張子は、「php」であり、ApacheなどのWEBサーバーのドキュメントエンコーディング(MIME)でphp指定が必要です。
「PHPのインストールの『httpd.conf』」を参照
- PHPのバージョン遷移と利用するバージョンは、
のように、PHP5.4をベースにしたプログラミング作成と文法を習得します。(Window XP,2003のOS対応もPHP5.4までとなっているため)
「PHP5.3から5.4へ移行のインストール」を参照
- PHPの基本的な構文
項目 | 指定方法 | 説明 |
PHP開始・終了タグ | <?php …?> | PHPタグの通常型 PHP5.3以降は、開始タグの後に空白が一文字でもあればそのようなファイルもパース処理(実行)可能。 |
<? ….?> | PHPタグの短縮型 「php.ini」でshort_open_tagをonにする必要あり。 |
<?= ….?> | <? echo … ?>と同じ形式 PHP5.4より以前は、「php.ini」でshort_open_tagをonにする必要がありますが、PHP5.4以降では、<?= は常に有効。 |
<% ….%> | ASP形式のタグの指定 →PHP7.0 から削除 asp_tagsをonにするとphpタグとして利用可能。 |
<script language= "php"> 〜 </script> | script タグ →PHP7.0 から削除 |
命令分離 | ; (セミコロン) | 各命令の終了(区切り)は、セミコロン(;)で指定します。PHPタグの終了前の命令分離「;」は、不要。 |
コメント | // 又は # | 指定した文字以降が、一行のコメント。 |
/* ~ */ | 指定した文字範囲内が、複数行のコメント。 |
(注):「echo」は、文字列の表示定義文
- PHP開始・終了タグは、「<?php …?>」と「<?= ….?>」以外は利用しないコーディング規約とします。
- ファイル全体が、PHPソースコードの場合は、「?>」のPHP終了タグは記述しないように推奨しています。
(「require文,include文」などの外部ファイルの読み込みで、外部ファイルの余分な動作防止のため)
- PHPタグとHTMLタグの指定方法
- HTMLドキュメント内に埋め込むPHPタグの場合
<html>
<head> ... </head>
... (HTMLの記述内容)
<body>
<?php
... (PHPの記述内容)
>
</body></html>
※一般的なPHPを盛り込んだソースフォーマットの記述方法です。
- 全てPHPタグでrequre(後述)で外部ファイル(HTML)読込の場合
<?php
reqire "xxx_header.html";
... (PHPの記述内容)
reqire "xxx_footer.html";
>
※require関数を利用して、HTMLドキュメントファイルのヘッダー部「xxx_header.html」、フッター部「xxx_footer.html」を構造的に分離して共通的に利用できるようにして、それぞれのページで違うボディ部分をPHP作成する方法が可能となります。
- PHPタグ内にヒアドキュメント(後述)のHTMLタグ記述の場合(混合記述)
<?php
echo <<< _EOF_
<html> ... <body>
_EOF_;
... (PHPの記述内容)
>
... (HTMLの記述内容)
</body></html>
※ヒアドキュメントを利用して、HTMLドキュメントのソースフォーマットを崩さずに利用する方法が可能になります。
- PHP作成の内部コードは、
PHP5.2以降の開発内部コードが「UTF-8」になり親和性を含め、HTMLドキュメント(charsetも同様に設定)、PHPソースファイルは全て「UTF-8」に統一します。DBの「MySQL」の保存コードも「UTF-8」に統一します。
(注):「php.ini」で「mbstring.language = Japanese;」、「mbstring.internal_encoding = UTF-8;」を指定してPHP処理のコードを統一します。
- PHPの取扱い可能なデータの型は、
8種類の基本型をサポートしており、4種類の論理値、整数、浮動小数点数、文字列をスカラー型と呼びます。
型の種類 | 型セットタイプ | 説明 |
論理値 | bool、boolean | 真(TRUE)か偽(FALSE)かを示す
|
整数 | int、integer | 正の整数、ゼロ、負の整数0755 など「0」で始まる数字は8進数、0x7ff など「0x」で始まる数字は16進数 |
浮動小数点数 | foat、double、実数 | 小数や実数 |
文字列 | string | シングルクォート「'」やダブルクォート「"」で囲まれた文字。
"..."の中では改行やタブ(¥n,¥t)などのエスケープシーケンスや変数を利用できますが、'...' の中では単なる文字列となります |
配列 | array | インデックス番号やキーワードにより分割(パーティション)区切りのある変数 |
オブジェクト | object | あるデータや、メソッド・プロパティを一体化したもの(をオブジェクト) |
リソース | resource | 関数によって作成される特別な型(ファイルハンドル、データベースへのリンク)オープンしたファイル、データベース接続など特別な値を持つリソース値 |
ヌル | NULL | 値無し(変数が値を持たないこと)を示す |
PHP基本文法と機能の体系
- PHP基本文法
PHPスクリプト言語は、文字列・配列と関数を組み合わせた基本的なプログラミングから、高度な機能のクラス・オブジェクト、正規表現、CGI、セッション処理、データベース操作、マルチメディア処理、メール送受信などの最終的に実用的なアプリケーション作成までが可能です。またフレームワークを利用したプログラミングも可能です。
PHPスクリプト言語文法まとめ(PDF)
- 変数は、
「$」ドル記号の後に変数名が続く形式で、変数名は英字またはアンダースコア(ライン)「_」から始まり、英数字と「_」が続く形式で表されます。
「予約語」「スーパーグローバル変数」、「スコープ」、「可変変数」などの特徴を理解する必要があります。
- 文字列は、
表示用に「print」、「print_r()」、「echo」があり、printは関数として定義され、戻り値があり、文字列をひとつしか指定できませんが、echoは言語構造(言語仕様のひとつ)として定義され、戻り値は無く、カンマを用いて文字列を複数指定できます。
「print_r()」は、変数の値に関する情報を解り易い形式で表示できるため、配列の構造的な表示用に利用します。
「変数のパース(実行)」は、スクリプトがダブルクォートで括られるかヒアドキュメント(後述)で指定された場合、その中の変数はパースされます。変数名と後続の文字の境が無い場合は、変数を { } で囲むとパースされます。
「文字列の連結」は、文字列間にドット「.」で指定することで連結可能です。
- 配列は、
添字が整数 0,1,..,nの単純配列と、添字が文字列の連想配列に大別され、組込まれた array() で作成することが可能で、「添字(省略可)と値」の対応した要素をコンマで区切って複数指定できます。(最後の要素のあとのカンマは、なくても良い)
配列の設定は、1つの変数名「$ary」に対して、
単純配列の場合、値のみの「$ary=array(1,3,'abc');」のように設定、配列要素のアクセスは「$ary[0], $ary[1]...」のように記述。
連想配列の場合、添字と対応値からなる要素の「$ary=array('a'=> 'abcd','b'=>'efgh',);」のように設定、配列要素のアクセスは「$ary["a"],$ary["b"]」のように記述。
多次元配列は、配列の要素として配列を格納したものであり、単純配列、連想配列の混合した構造でも可能です。
無名配列は、array() の代わりに [] (ブラケット)も使えます。(PHP5.4以降)
(例)多次元配列設定、追加と表示(print_r 利用)$ary = array(
'abc',array('a' => '多次元','b'=>'配列設定')
);
$ary[] = '追加'; //多次元配列に文字列を追加
echo '<pre>';
print_r($ary); //多次元配列を表示
echo '</pre>';
※実行結果の表示内容で多次元配列データ構造を確認
Array
(
[0] => abc
[1] => Array
(
[a] => 多次元
[b] => 配列設定
)
[2] => 追加
)
- 演算子は、
無名配列、代数演算子、比較演算子、論理演算子、ビット演算子、三項演算子、代入演算子があります。
(詳細は以下を参照)
PHPの演算子の詳細と優先順位(PDF)
- 制御構造は、
処理分岐「if ~ elseif/else if ~ else,switch」、
繰り返し「while,do-while,for,foreach」、
制御「break,continue,return,goto(PHP5.3以降)」
などの命令文があります。
- 外部プログラム読み込みは、
ライブラリやサブプログラムの読み込みには、ファイルの読み込み失敗した場合に警告 (E_WARNING) を発し処理は続行の「include」とファイルの読み込み失敗した場合に致命的なエラー発生(E_COMPILE_ERROR レベル)し処理は中断の「require」があります。
既に同じ外部ファイルをロードしている場合は、ロードしない「require_once,include_once」もあります。
- 関数は、
組込み関数とユーザ定義関数の2種類があります。使い方は同じですが組込み関数はPHPであらかじめ用意された関数であり、ユーザ定義関数「function 関数名(引数){ ... }」は自分で定義した関数で、途中に記述してあっても定義のみのため処理を実行しません。関数を実行する場合は、「関数名(引数);」の命令文を記述する必要があります。
(例1)今日の日付を書式化する組込み関数(date)を利用したユーザ定義関数(get_now)から、日付表示するecho get_now(); //ユーザ定義関数を実行して表示
function get_now(){ //今日の日付を得るユーザ定義関数
return date("Y-m-d H:i:s"); //日付書式化の関数
}
※上記例をコピー、PHPタグで囲んだソース作成してPHP実行で、表示例:"2015-07-13 17:39:08"を確認下さい。
- ヒアドキュメント
ヒアドキュメント構文 「命令文 <<< +指定終了ID ~ (改行後)指定終了ID;」があります。「<<<」の後にヒアドキュメントの終了するIDを指定して、任意の文字列を記述した後で、改行後の指定終了IDと区切りの「;」までを対象範囲として文字列処理をします。
(例1)任意の文字列を表示するecho <<< _EOL
... (任意の文字列)
_EOL;
(例2)任意の文字列を変数($str)に代入する$str = <<< _EOL
... (任意の文字列)
_EOL;
- 実践的アプリケーション作成の主な機能体系は、
主な機能 | 機能習得の対象 |
セッションとクッキー | $_SESSIONと$_COOKIEのスーパーグローバル変数 session_startなどの関連関数を利用 |
CGI フォーム処理 | $_GET,$_POST,$_REQUEST,$_FILESのスーパーグローバル変数 ファイルアップロード処理 圧縮・解凍「zip」 |
正規表現 | preg_xxxの各種関数 Perl言語互換の正規表現を利用 |
クラスとオブジェクト | クラス、コンストラクタ プロパティ、メソッド クラスの抽象化 オブジェクトの継承 インターフェイス オーバーロード |
ファイルシステム | ディレクトリとファイルの作成・削除 入出力レコード処理 |
データベース | MySQL への接続用のAPIが三種類「mysql、 mysqli 、PDO」あり、mysqli か PDO_MySQLを利用(推奨) |
メール | 「mail、IMAP、POP3」 マルチパート「Mail、Mail_Mine」利用 「メールサーバーとPHP連携プログラミング」を参照 |
マルチメディア | 画像処理「GD、ImageMagick」 動画処理「FFMPEG」 |
WEBサービス、SNS | RSS連携「simplexml_load_file」 「http_request」 SNS連携「facebook」 |
ライブラリ・リポジトリ | PEAR、PECL GitHub |
などがあり、習得目標とします。
※尚、以下のものは、実践WEB開発で習得します。
フレームワーク | テンプレート「Smarty」 フレームワーク「cakePHP、Symphony」 パッケージ「WordPress、EC-CUBE」 |
PHPプログラミング補足説明
- 『文字と文字列』の違い
- 文字は、コード表現されたものと同じであり、UTF-8コード体系では英数字(1バイト)や日本語(2~3バイト)があります。文字列は、文字の並びや集まり(連結されたもの)です。文字列は、引用符で括ることで表現できます。
(注)文字列の最大長は2GBです。
- 『PHPの変数』とは
- 変数とは、プログラムのソースコード中で、データを一時的に記憶しておくための領域に固有の名前を付けたもので、変数につけた名前を変数名、記憶されているデータを変数の値といいます。
PHPの変数は、「$」ドル記号の後に変数名が続く形式で、変数名は英字またはアンダースコア(ライン)「_」から始まり、英数字、「アンダースコア」「アスキー文字(127~255)」が続く形式で表され、英字の大文字小文字を区別します。
(注)変数名に「-」(ハイフォン)は利用できません。
- 『PHPの配列』とは
- 複数のデータを連続的に並べたデータ構造。各データをその配列の要素といい、自然数や文字列の添字(インデックス)で識別されます。配列の要素として配列を格納したものを「多次元配列」、文字列を添字に用いるものを「連想配列」と呼びます。
- 『PHPの関数』とは
- いくつかの処理をまとめ関数名として名前をつけて定義したものです。何度も繰り返し行われる一連の作業を関数としてまとめておき、必要に応じて関数を呼び出して使います。関数に引き渡す値を「引数」、実行結果の返り値を「戻り値」と呼びます。
- 『クラス』とは
- 何かを表現する属性(データ構造)、実行(振る舞い)するモノ、コトの設計図(テンプレート)のようなもので、オブジェクトの属性や操作の共通性を抽象化した概念であり、オブジェクトの雛型といえます。
- 『オブジェクト』とは
- 物理的(目に見えるもの)、概念的(目に見えないもの)にまとまったモノ、コトのことで、インスタンスとも呼ぶ。クラスに対して初期的なデータを与えて作成し、具体的な属性値(データ)、操作する手続きをもつもの。
- 『名前空間』とは
- 名前の集合を分割することで衝突の可能性を低減しつつ参照を容易にする概念で、全事象の元の全ての組み合わせ可能なものからなる集合全体および物理的な名称を指すことが可能です。PHPの名前空間は、「namespace」で宣言して、関連するクラスやインターフェイス、関数、そして定数をひとまとめにして扱うものです。
- 『トレイト(trait)』とは
- 単一継承の制約を減らすために、 いくつかのメソッド群を異なるクラス階層にある独立したクラスで再利用できるようにした仕組み。継承しなくてもクラスのメンバーに追加できるもので、単にいくつかの機能をまとめるためだけで、トレイト自身のインスタンス作成はできない。
PHPリファレンス
推奨参考図書
- 「実践マスター PHP+MySQL PHP5対応」(ソーテック社)
- 「PHP逆引き大全 516の極意」(秀和システム)