1 PHP 文法 担当 岡村耕二 月曜日 2限 平成 20 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による 以前の講義資料をもとにしています。
2 演習問題の回答例 問題1) PHP を用いて、 1, 2, 3,...., 99 と、カンマで区切られた 1 から 99 までの数字をすべ て表示するプログラムを作成せよ。 <?php for ($i=1;$i<100;$i++){ printf("%d",$i); if($i!=99) printf(", "); } printf("\n"); ?>
3 演習問題の回答例 問題2) 上の問題1の出力について、2の倍数は赤で、3の倍数は青で、6の倍数は緑で表示するよう にプログラムを改良せよ。 <?php for ($i=1;$i<100;$i++){ if($i%6==0) printf(" "); else if($i%2 ==0) printf(" "); else if($i%3==0) printf(" "); printf("%d",$i); if($i%2==0 ||$i%3==0) printf(" "); if($i!=99) printf(", "); } printf("\n"); ?>
4 前回のおさらい(1) PHP: Hypertext Preprocessor HTML で書かれた普通の web ページの中に, PHP プログラ ムを埋め込むことができる. –PHP で書かれた部分を で囲む. –web サーバ上に置くファイルの拡張子 HTML のみのファイル:.htm または.html PHP を含むファイル:.php
5 前回のおさらい(2) ブラウザ HTML PHP web サーバ PHP 処理用 モジュール ①ページのリクエスト ②ページの取り出し ③ PHP 部分の処理 (結果は HTML に 埋め込み) HTML ④ HTML のみと なったページが ブラウザに返信 される (サーバサイドでの処理となっている)
6 前回のおさらい(3) PHP の文法(基礎編) – 関数の呼び出し – 文と文の区切り –PHP からの「脱出」 – コメント – 変数とデータ型 – 演算子 – 制御構文 if , else , elseif , while , for 文など
7 今日やること PHP の文法(基礎編)-つづき – 配列 – 関数のいろいろ – データを入力して計算する 練習問題 演習問題(宿題)
8 PHP の文法(基礎編) (つづき)
9 配列(1) 前回扱った変数はすべて,1つの変数が1つの値しか持たなかった. – スカラー型 配列( array ) – 複数の値をリストとしてまとめて格納する. ひとつひとつの値を要素( element )と呼ぶ. – ( PHP では)要素の個数を後から勝手に増やすことができる. C では,格納できる要素の最大個数をあらかじめ宣言しなくて はならない. – ( PHP では)配列の要素を,番号(添え字)の代わりに名前(文 字列)で区別することもできる. 名前で要素を区別するような配列を連想配列と呼ぶ. C にはこのような配列はない. – ( PHP では)異なる型の要素が混在する配列も作れる. C では構造体( struct )にするしかない.
10 配列(2) 配列を作る・修正する方法 –array() 関数を使う 要素を最初に全部一括登録したいときに便利 – 角括弧( [ ] )構文で作成・修正する 要素をひとつずつ登録・変更したいときに便利
11 配列(3) array() 関数による配列の作成・代入 array( key => value,... ) key は、文字列または非負の整数.文字列の大文字小文字は区別される. key の順序は任意. value にも制約はない. $fruit = array( 0 => "apple", 1 => "banana", 2 => " みかん "); "apple" 0 "banana" 1 " みかん " 2 例1 $fruit $fruit[0 ]
12 配列(4) 角括弧( [ ] )構文による作成・修正 $fruit[] = "apple"; $fruit[] = "banana"; $fruit[] = " みかん "; 添え字ゼロから順に,自動的に詰めていく $fruit[1] = "banana"; $fruit[0] = "apple"; $fruit[2] = " みかん "; 添え字(または名前)を陽に指定して この方法では,添え字 0,1,2, … という 順序で欠番無しに詰め られる. この方法では,任意の順 序で要素を格納すること ができる.また,欠番が あってもよい. array() 関数の実行結果(配列)を配列変数に代入する場合と異なり,角括弧が 必要であることに注意!
13 配列(5) 連想配列の例 $profile["sex"] = " 男 "; $profile["age"] = 20; $profile["country"] = "Japan"; $profile = array( "sex" => " 男 ", "age" => 20, "country" => "Japan" ); 連想配列では,任意 の順序で要素を格納 することができる. ただし,番号の場 合と異なり,文字 列のキーは省略不 可.
14 配列(6) 番号によるキーと名前によるキーが混在する配列も可能で あるが,よほど必要でない限り,あまり使わないほうが無 難であろう.
15 配列(7) 多次元配列 – キーを複数指定することで要素を特定するような配列 も作れる. $two_dimensional_array = array( key1 => array(... ), key2 => array(... ),... ); $one_dimensional_array1 = array (... ); $one_dimensional_array2 = array (... );... $two_dimensional_array = array( key1 => $one_dimensional_array1 ), key2 => $one_dimensional_array2 ),... ); array() 関数の呼 び出しが「入れ 子」になっている. 配列の要素に他の 配列を入れている.
16 関数 ( )で囲まれたデータ(引数)を受け取り,何かの処理 をして,結果を返す. – 「引数」は「ひきすう」と読む. ほとんどの場合,実行結果は,変数に直接代入できる. – 実行結果として返される値は,「戻り値」と呼ばれる. – 戻り値がのちのち必要になる場合は,いったん変数で 受け取っておいて,その変数を利用するとよい. 戻り値を受け取る変数 = 関数名 ( 引数 );
17 関数のいろいろ ここまでに出てきた関数 –print() :実は,論理型の値( TRUE/FALSE )を返す. –array() :配列を返す. その他にも,たくさんの定義済み関数がある.たとえば: –PHP 処理系の情報を表示する関数 – 文字列を操作する関数 – 日付・時刻を得る関数 – 数学関数 詳細は, PHP に関する書籍や,下記の URL を参照するとよ い
18 PHP 処理系の情報を表示する関数 (論理型変数) = phpinfo( オプション ); – オプション(省略可)の例 INFO_ALL :すべての情報(デフォルト) INFO_GENERAL : PHP 処理系をサーバにインス トールしたときの状況 世界でもっとも単純な PHP プログラム? phpinfo() 関数が 正当な HTML 文書に必要 なすべてのタグを作って くれるので, HTML デー タの中に埋め込まなくて もよい.
19 文字列を操作する関数の例 (整数型変数) = strlen( 文字列 ); – 文字列の長さを返す. (文字列変数) = strchop( 文字列 ); – 文字列の末尾にある空白文字(スペース,タブ,改行 文字その他)を取り除く. ASCII コードのような 1 バイト文字コードの場合と, EUC_JP ・ UTF-8 などのよ うな多バイト長コードの場合とで,実行結果が異なる(あるいは多バイトで は正しく実行できない)関数もある. そのような関数については,レファレンスマニュアル等で,同じ関数名の頭 に「 mb_ 」のついたものが用意されているかどうか,探して機能を比較して みるとよい. なお, mb は「 multi-byte 」の略である.
20 日付・時刻を得る関数の例 (文字列) = date( 書式文字列, タイムスタンプ ) ; – 書式文字列の例 (実に詳細な指定法が可能だが,ここでは例を2つだ け) "r" … 「 Wed, 2 May :01: 」のような 形式 "F j, Y, g:i a" … 「 March 10, 2001, 5:16 pm 」のような形式 – タイムスタンプ(省略したときは現在の日時) UNIX では,通常,グリニッジ標準時の 1970 年 1 月 1 日 00:00:00 からの通算秒数で表現される.普通は あまり考える必要なし. 現在の時刻は:
21 数学関数の例 (整数型または浮動小数点型変数) = abs( 整数または実数 ); – 絶対値を求める. (浮動小数点型変数) = sqrt( 浮動小数点型デー タ ); – 平方根を求める.
22 値を入力して、足し算を行う main.htm plus.php <?php $a=$_POST["a"]; $b=$_POST["b"]; printf("%d + %d = %d",$a,$b,$a+$b); ?>
23 入力フィールド テキスト入力フィールド (<input type=text) パスワード入力フィールド (<input type=password) チェックボックス (<input type=checkbox) ラジオボタン (<input type=radio) 提出ボタン (<input type=submit) リセットボタン (<input type=reset) イメージ上の座標入力 (<input type=image) ファイル名入力フィールド (<input type=file) 隠しフィールド (<input type=hidden) 選択メニュー (<select... ) テキストエリア (<textarea... )
24 入力フィールド(例)
25 練習問題 現在の日時を「ただいまの日時は Mon, 12 May :00: です.」のような形式で表示するプログラ ムを作成せよ。 日数を入力し、現在の日付にその日数を足した日付を表示 するプログラムを作成せよ。 – 今日の日付は Mon, 12 May 2008 です. 10 日後は、 Thu, 22 May 2008 です。 ヒント : PHP の関数は、 C 言語とよく似ています。 – 関数 time(); 現在時刻を Unix エポック (1970 年 1 月 1 日 00:00:00 GMT) からの通算秒として返します。
26 a, b, c を入力して、 2 次方程式を解くプログラムを作成せよ。 –aX^2 + bX = C 名前、数字を5名分入力し、数字の順に並び替えるプログラムを作成 せよ。 – 入力画面および入力例 – 出力例 大橋 29 馬出 22 箱崎 12 六本松 9 伊都 4 演習問題 箱崎 12 六本松 9 馬出 22 伊都 4 大橋 29
27 うまく表示できないときのチェックリスト HTML の開始タグ・終了タグはきちんと対応が取れている か? – 例: ~ PHP の開始タグ・終了タグはきちんと対応が取れている か? – ( ~ ) , { ~ } , " ~ " ,などの対応は取れている か? あるべきところにセミコロンがあるか? 連想配列に値をセットするとき/値を読むとき,キーの名 前を打ち間違えていないか? – 例: $message["Wed"] と $message["Wen"];