1.PHP入門 2.PHP言語入門 3.データベースとPHPの連携 4.Class

Agenda
1.PHP入門
PHP の概要と PHP プログラムを作成するための基本事項
2.PHP言語入門
PHP 言語の基本的な文法
3.データベースとPHPの連携
PHP でデータベースに接続し、データベースの操作を行う
4.Class入門
PHP のクラスと、クラスから生成されるオブジェクトについて
5.PEAR
PEARの役割について
1.PHP入門
PHP の概要と PHP プログラムを作成するための
基本事項を説明します。
□ PHP とは
□ PHP プログラムの構成
□ プログラムの実行
PHPとは
• PHP言語の特徴
PHPとは「PHP Hypertext Preprocessor」の略
C言語やJAVA、Perlなどと同じプログラミング言語
※ファイルの拡張子が「 .php 」
□ インタープリタ型スクリプト言語
□ 文法が比較的容易 (厳密な型チェックなし)
□ CGIと比較すると、実行速度が早い
□ どのような種類のデータベースとも接続可能
□ Webアプリケーション開発に特化した言語
• HTMLを動的に生成する技術
1: プログラムでHTMLを作成するタイプ
200X年X<BODY>
<HTML>
Program
<HTML>
<BODY>
200X年 X月 X日
・・・
</BODY>
</HTML>
2: HTMLの中にプログラムを埋め込むタイプ
<HTML>
<BODY>
・・・ ?>
<?php
</BODY>
</HTML>
<HTML>
<BODY>
200X年 X月 X日
</BODY>
</HTML>
<HTML>
<BODY>
200X年 X月 X日
・・・
</BODY>
</HTML>
• HTMLを動的に生成する技術
1: サーバー上のプログラムを利用するタイプ
– CGI(Common Gateway Interface):
• 多種言語(C, VB, Perl)が利用できる
• カウンター 、掲示板 、アンケートフォームなどの
ページを作成することができる。
– Javaサーブレット:Java
• 処理効率が良い(サーバーのメモリ上に常駐)
• セッション管理、DBアクセス、メール送受信機能を有する。
• HTMLを動的に生成する技術
2: HTMLの中にスクリプトを埋め込むタイプ
– ASP (Active Server Pages)
• 米マイクロソフトが開発した、Webサーバー用のサーバー・サイド・スク
リプト処理機構。97年4月にリリースしたInternet Information Server3.0
に初めて搭載した。
– PHP (Hypertext Preprocessor)
• 無料で利用可能。プラットホームが幅広い、DBアクセスやメール関連
のライブラリが提供されている
• HTMLファイル内に直接記述するタイプのスクリプト言語。PHP/FI
(Personal Homepage/Form Interpreter)の後継。
– JSP (Java Server Pages)
• 初回参照時にコンパイルされ、サーブレットとして動作。EJB等が利用
可能。
• 米サン・マイクロシステムズが1999年6月、JSPの最初の仕様
「JavaSever Pages 1.0」を策定した。
PHP プログラムの構成
<html>
<head>
<title>PHP World</title>
</head>
<body>
<?php
PHPの開始
?>
PHPの終了
</body>
</html>
PHPはHTMLの中に
埋め込むように記述します。
※拡張子は、『.php』
プログラムの実行手順
PHP プログラムのソースプログラムの作成から、
実行手順は以下のようになります。
ソースプログラムの作成
エディタを用いてソースファイルを作成
※ファイル名には、拡張子 .php を付ける。
ファイルの保存
ブラウザからアクセス
※ Apacheが起動されていることが前提
実行
はじめてのPHPプログラム
文字を表示するプログラムです。(ファイル名:hello.php)
<html>
<body>
<?php
print("Hello World!");
?>
</body>
</html>
メモ帳に入力し、
Apacheをインストールした
ディレクトリ 配下に
progというフォルダを作成し
その中にhello.phpという
名前で保存します。
『実行方法』
ブラウザから、http://127.0.0.1/prog/hello.php
にアクセスします。
※Apacheが起動されていることが前提
2.PHP 言語入門
PHP 言語の基本的な文法を紹介します。
□
□
□
□
□
□
□
□
□
□
□
コメント
変数
型
配列
定数
関数と引数
演算子と演算子の優先順位
分技文
ループ文
ファイル操作
HTTP関数
コメント
PHP 言語におけるコメントの指定は、以下のとおりです。
// この行の最後までをコメントとして扱う。
#
この行の最後までをコメントとして扱う。
/* 複数行に渡ってコメント指定ができる。
*/
例1
<html>
<head>
<title>はじめてのPHP</title>
</head>
<body>
<?php
//この行のみコメントが記述できます。
print(”Hello World!”);
?>
</body>
</html>
例2
<html>
<head>
<title>はじめてのPHP</title>
</head>
<body>
<?php
/*
複数行コメントが記述できます。
*/
print(”Hello World!”);
?>
</body>
</html>
変数
『変数』とは、一時的にデータの『値』を格納し、計算結果などによって
その値の内容が変化する性質を持ちます。
文字列 数 配列
変数
変数は、『代入演算子』によって値を
変数に格納する。
PHPでは、変数の行頭に
『$』をつける。
$変数名 = 変数に代入する値
・変数は『$』ではじめること
・変数に使える文字は英字、数字、アンダースコア
・変数名の始まりに数字は使えない
・変数名の大文字と小文字は区別される
※ApacheやPHPですでに定義されている変数もいくつかある
(例、$_POST:HTMLから送られてくるデータを受け取る時に使用)
実習 : 変数に名前をつけて、値を代入してみよう!
<html>
<head>
<title>はじめてのPHP</title>
</head>
<body>
<?php
//文字列を変数に代入し出力する
$str = ” Hello World!”;
print ($str );
?>
</body>
</html>
型
変数は型を持ち、型はその変数が整数であるのか、
文字列であるのか表します。
・文字列変数
ダブルコーテーション、シングルコーテーションで囲まれた変数
・数値変数
何も囲まれずに値を格納(文字列を何も囲まなければエラーとな
る)
※PHPではこの『型』の判断をほぼ自動で行ってしまうので
この『型』を意識しなくて良い。
※変数が自動生成されるのでタイプミスに注意!
例
<?php
//変数の自動生成
$abcd= ” Hello World!”;
print ($abcd );
?>
【論理型】 boolean型とも言い、「true」か 「false」の2種類
例 $var = true;
【整 数】 integer型とも言い、浮動小数点以下の値を持たない
あるいは切り捨てられる値を持つ。
一般的な整数の範囲は、-2,147,483,645~2,147,483,645
例 $var = 1500;
【浮動小数点数】 float型、double型、real型ともよばれ、
小数点以下の数値を持つ。
例 $var = 3.14159265;
【文字列】 string型とも言い、文字列を値とした変数。
英字や漢字、かななどを扱うことができる。
文字列を代入する場合には、「’」 (シングルコーテーション)
「’’」(ダブルコーテーション)で囲みます。
例 $var = ’こんにちは!’;
$var 2= ” こんにちは $var さん”;
《 型キャストの書式 》
(bool),(boolean)
(int),(integer)
(float),(double),(real)
(string)
(array)
(object)
→論理型へのキャスト(型変換)
→整数型へのキャスト
→浮動小数点へのキャスト
→文字列へのキャスト
→配列へのキャスト
→オブジェクトへのキャスト
例
<html>
<head><title>cast.php</title></head>
<body>
<?php
$kaimono = 1234;
$kaimono = $kaimono * 1.05;
$seikyugaku = (int)$kaimono;
print (“請求額は”.$seikyugaku.“円です”);?>
</body>
</html>
実行結果
-----------------------------請求額は1295円です
配列
配列とは1つの変数名で複数の値を格納できる。
変数
color
例
<html>
<body>
配列
color
<?php
$color[0]="red";
$color[1]="green";
$color[2]="blue";
$color[3]="yellow";
$color[4]="gold";
print_r($color);
?>
color
color
color
color
変数名[添え字]
※添え字(インデックス)
は0(ゼロ)から始まる
</body>
</html>
《連想配列》
インデックスが文字列の配列のもの
例
<html>
<head><title>association_array</title></head>
<body>
<?php
$like1['color']= "blue";
$like1['food']= "curry";
$like1['sports']="baseball";
print_r($like1);
?>
</body>
</html>
定数
変数と同じように値を格納するものですが、変数と違って
一度値を設定すると値が変更できません。
※スクリプト内で何度も同じ値が出てくるような場合に使用
define( ”定数名” , ”値” )
定数を定義するために、define()関数を使い、
定数名とその値を引数とする。
【定義済みの定数】
__FILE__ → 実行しているスクリプトファイル名
__LINE__ → 実行中の行数
FALSE
→ 偽の値
NULL
→ 値を持たないという意味の値
TRUE
→ 真の値
関数と引数
関数とは、『あるまとまった処理や命令を1つの表現に置き換えて
簡単に使えるようにしたもの』
引数の役割は、『関数に値を渡すこと』
《ユーザ定義関数》
あらかじめ動作や機能が決められている関数ではなく
ユーザが独自にその動作を決めることができる仕組み
function 関数名 ( 引数 ) {
処理
}
「function」 という命令を使って定義し、「処理」の部分に
自分でまとめておきたい処理や機能を記述しておく。
必要時、この関数を呼び出せば、まとまった処理が簡単に実現でき
何度も再利用して使用することができる。
例、合計金額から消費税を抜いた税抜き価格を計算する関数
<?php
function calc($zeikomi) {
$zeinuki = $zeikomi / 1.05;
return $zeinuki;
}
?>
<html>
<body>
<?php
print ( calc(105) );
?>
</body>
</html>
実行結果
--------------100
作成した関数を呼び出す場合
作成した関数名( 引数 )
変数の有効範囲(ローカル変数とグローバル変数)
変数には有効範囲(スコープ)があり、関数内にあるものを
ローカル変数、それ以外にあるものをグローバル変数と
呼びます。
<html>
<head>
<title>no_global.php</title>
</head>
<body>
<?php
$a = 1;
function test(){
print ($a+1);
}
test();
?>
実行結果
</body>
--------------</html>
1
<html>
<head>
<title>global.php</title>
</head>
<body>
<?php
$a = 1;
function test(){
global $a;
print ($a+1);
}
test();
?>
実行結果
</body>
--------------</html>
2
演算子
【算術演算子】
演算子
+
*
/
%
意味
加算
減算
乗算
除算
剰余
例
$a +
$a $a *
$a /
$a %
$b
$b
$b
$b
$b
結果
$aに$bを足す
$aから$bを引く
$aに$bをかける
$aを$bで割る
$aを$bで割った余り
加算子と減算子
++
前置加算子
後置加算子
++$a
$a++
$aの値に1足した後、 $aを返す
$aを返した後、 $aの値に1足す
--
前置減算子
後置減算子
--$a
$a--
$aの値から1引いた後、 $aを返す
$aを返した後、 $aの値から1引く
【比較演算子】
演算子
==
===
!=
<>
!==
<
>
<=
>=
意味
等しい
型が同じで
等しい
等しくない
等しくない
等しくないか
型が異なる
より小さい
より大きい
より小さいか
等しい
より大きいか
等しい
例
結果
$a == $b
$aが$bと等しい場合にTRUE
$a === $b $aが$bに等しく型が同じである
場合にTRUE
$a != $b
$aが$bに等しくない場合にTRUE
$a <> $b $aが$bに等しくない場合にTRUE
$a !== $b $aが$bに等しくないか、同じ型で
ない場合にTRUE
$a < $b
$aが$bより小さい場合にTRUE
$a > $b
$aが$bより大きい場合にTRUE
$a <= $b $aが$bより小さいか等しい場合に
TRUE
$a >= $b $aが$bより大きいか等しい場合に
TRUE
【論理演算子】
[演算子]
and , &&
or , ||
xor
!
[意味]
論理積
論理和
排他的論理和
否定
【代入演算子】
[演算子]
=
[意味]
代入
【ビット演算子】
[演算子]
&
|
^
~
<<
>>
[意味]
論理積
論理和
排他的論理和
否定
左シフト
右シフト
【文字列演算子】
[演算子]
.
[意味]
結合
【複合演算子】
[演算子]
[例]
[結果]
+=
a += b
a + bの演算結果をaに代入
-=
a -= b
a - bの演算結果をaに代入
*=
a *= b
a * bの演算結果をaに代入
/=
a /= b
a / bの演算結果をaに代入
.=
a .= b
a . bの演算結果をaに代入
演算子の優先順位
優先順位
高い
低い
演算子
new
[
! ~ ++ -- (int) (double) (string) (array) (object) @
*/%
+-.
<< >>
< <= > =>
== != === !==
&
^
|
&&
||
?:
= += -= *= /= .= %= &= |= ^= ~= <<= >>=
print
and
xor
or
,
分岐文
if.else 文:
if ( boolean 式) {
処理;
} else if ( boolean 式) {
処理;
} else {
処理;
}
Switch 文:
switch ( 式 ) {
case 定数式1:
処理;
case 定数式2:
処理;
‥‥
default:
処理;
}
サンプル
$point = 80;
if ($point >= 70) {
print (“合格です!”);
} else {
print (“残念!”);
}
$hyouka = "B";
switch ($hyouka){
case "A":
print (“パーフェクト!”);
break;
case "B":
print (“素晴らしい!”);
break;
case "C":
print (“合格!”);
break;
default:
print (“がんばりましょう!”);
}
繰り返し制御(ループ)
for ループ
for (式1 ; boolean 式 ; 式2 ) {
処理;
}
サンプル
for ($a=0; $a<=5; $a++){
print ($a."<br />");
}
while ループ
while ( boolean 式 ) {
処理;
}
do-while ループ
$a=0;
while ($a <= 5) {
print ($a."<br />");
$a++;
}
do {
処理;
} while ( boolean 式 ) ;
ループ文を制御するために提供されている制御文
break [ ラベル ]; continue [ ラベル ]; ラベル: 処理;
return [ 式 ];
$a=0;
do {
print ($a."<br />");
$a++;
} while ($a <= 5);
foreach ループ
foreach ( 配列 as $value ) {
処理;
}
foreach ( 配列 as $key => $value ) {
処理;
}
サンプル
$color3=array(0=>'red', 1=>'green', 2=>'blue');
foreach ($color3 as $value) {
実行結果
print ($value."<br />");
--------------}
red
green
blue
分岐と繰り返しのサンプルプログラム(break.php)
<html>
<head>
<title>break.php</title>
</head>
<body>
<?php
// break文
$arr_name = array (‘tanaka', 'sato', ‘suzuki', 'yamada', ‘kato');
foreach ($arr_name as $value) {
// 配列の要素を順に$valueに代入する
if ( $value == 'yamada' ) {
print $value . "さんです<br>";
break;
// 'yamada'まできたらforeachを抜け出す
}
print "$value<br>";
}
?>
</body>
</html>
3.データベースとPHPの連携
□ データベースに接続する
□ データベースを操作する
データベースに接続する
mysql_connect( [ホスト名], [ユーザ名], [パスワード] )
→指定したホスト名で稼動するMySQLに、指定したユーザ名、パスワードで
接続します。接続に成功するとMySQLとの接続IDを、失敗するとFALSEが返ります。
mysql_select_db( データベース名, [接続ID] )
→指定したデータベースを利用できる状態にします。
成功するとTRUEを、失敗するとFALSEを返します。
mysql_query( クエリ, [接続ID] )
→クエリの実行を行います。
クエリがSELECT文の場合は、成功時にクエリの結果IDを返します。
DELETE、INSERT,UPDATE文については成功時にはTRUEを返します。
クエリ失敗時には、FALSEを返します。
mysql_free_result( 結果ID )
→結果を保持しているメモリを開放します。
サンプルプログラム(sample_connect.php)
<html>
<head><title>簡易接続</title></head>
<body>
<?php
$conn = mysql_connect("localhost", "usr", "passwd");
mysql_select_db(“sampledb", $conn);
$res = mysql_query("SHOW TABLES",$conn);
if($res){
print (“データ獲得に成功しました。”);
}
mysql_free_result($res);
?>
</body>
</html>
サンプルプログラム(sample_array_data.php)
<html><head><title>配列データの取得</title></head>
<body>
<table border="1">
<tr><td>題名</td><td>著者</td><td>出版社</td></tr>
<?php
$host = "localhost";
if (!$conn = mysql_connect($host, "usr", "passwd")){
die("MySQL接続エラー.<br />");
}
mysql_select_db(“sampledb", $conn);
$sql = "SELECT * FROM book_table";
$res = mysql_query($sql,$conn);
while($row = mysql_fetch_array($res)) {
print("<tr>");
print("<td>".$row["btitle"]."</td>");
print("<td>".$row["bauth"]."</td>"); CREATE TABLE book (
print("<td>".$row["bpub"]."</td>");
bid int(10) unsigned NOT NULL auto_increment,
print("</tr>¥n");
btitle varchar(20) NOT NULL default '',
}
bauth varchar(20) NOT NULL default '',
mysql_free_result($res);
?>
bpub varchar(20) NOT NULL default '',
</table>
PRIMARY KEY (bid)
</body>
) TYPE=MyISAM;
</html>