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