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