「PHP入門」を読む その3

PHP入門←教材はここ!

ユーザー定義関数

  • 関数定義に関してASとほぼ同じ。
  • 関数定義の一般的な書式

 function 関数名() {
  処理に必要なプログラム
  }

  • 戻り値がある場合

  function samp() {
   return(戻り値);
  }

  • サンプル
 <?php
  function strong($text) {
    return("<em>$text</em>\n");
    }

  print(strong("この文字は強調されます"));
 ?>
  • 引数の値を渡す場合と、引数の参照を渡す場合があって、参照渡しをすると変数本体が変化する。
  • なるほど意識してなかったけどこんなやり方があったのか。
  • サンプル
<?php
  function num($a) {
    $a = ($a +2) * $a;
      return $a;
    }

   $b = 5;
   print("\$b の初期値は". $b. " です<br>\n");
   $c = num($b);
   print("関数に渡された \$b の値は". $b. " です<br>\n");
   print("関数の実行結果は ".$c. " です");
 ?>
  • 出力結果

 $b の初期値は 5 です
 関数に渡された $b の値は 5 です
 関数の実行結果は 35 です

  • サンプルの「num($a)」を「num(&$a)」に変更し参照渡しした出力結果

 $b の初期値は 5 です
 関数に渡された $b の値は 35 です
 関数の実行結果は 35 です

引数にアンパサンド「&」をつけると、「参照渡し」(リファレンス渡しとも言う)となり、引数として渡された変数自体の値を変化させることができます。

クラスとオブジェクト

  • クラスの定義もほぼASと同じ感じ。オブジェクト型言語ってみんなこんな感じなのかな。
  • サンプル*1
  class Shopping {
     var $item = "コンピュータ";
     var $price = 99800;         // ここまでメンバ変数の設定

     function getTotal() {
       $tax = $this->price * 0.05;
       return $this->price + $tax;
      }                          // ここまでメソッドの定義
   } 
  • さりげなく書いてある「$this->price」って何?と思ったら、次に書いてあるっぽい。
  • はい、オブジェクトの生成は次の書式。

$変数 = new クラス名();

  • 定義したクラスを利用するために「new」でオブジェクトの生成。
  • これにより指定した変数にオブジェクトが格納されると。なるほど。
  • そして実際にクラスのメンバ変数やメソッドを取り込む記述が以下。
   $newShopping = new Shopping();
     $item = $newShopping->item
  • ここでやってるのは、変数newShoppingにクラスShoppingのオブジェクトを格納して、変数itemにクラスshoppingのメンバ変数itemを格納してるってことかな?
  • このあたりの説明がほぼ無いのが初心者には厳しいのでは。
  • 次にサンプルコードあり。
  • サンプル
 <?php
 class Shopping {
   var $item =  "コンピュータ";
   var $price = 99800;

   function getTotal() {
     $tax = $this->price * 0.05;
     return $this->price + $tax;   // 税込価格の設定
    }
  } 

  $result = new Shopping();
  $item = $result->item;
   print("$item の会計は".$result->getTotal()."円になります\n");
 ?>
  • 出力結果

 コンピュータ の会計は104790円になります

  • だいたい思った通りに動いてますね。
  • メソッド呼び出すのも「$result->getTotal()」と変数と同じのりなんだ。

日付と時間

  • おっといきなりいっぱいあり。ワールドワイドだ。
  • 普通に扱うのはUNIX時だけあればいいと思ってたけど、世界協定時UTC*2でいいのかな。日本は+9hですね。
  • 日付情報の取得にはgetdate()関数
  • 連想配列として各要素をインデックスに持つ。
  • 細かく覚えなくてもいちいちリファレンス参照したらいいかな。
  • 以下にサンプルコードの改造版。
  • サンプル
<?php
  $today = getdate();
  print("$today[year]$today[mon]$today[mday]日<br>\n");
  print("現在の時刻$today[hours]$today[minutes]$today[seconds]秒<br>\n");
  print("今年1月1日から $today[yday]日目です<br>\n");
  print("$today[weekday] $today[month]/$today[mday]/$today[year]");
?>
  • 出力結果

 2009年3月10日
 現在の時刻14時50分42秒
 今年1月1日から 68日目です
 Tuesday March/10/2009

  • 時刻も書き出せるようにしてみました。
  • もうひとつdate()関数という便利そうなモノが!
  • 引数の指定によっていろんなフォーマットで時刻を表示できるとのこと。
  • サンプル
<?php
  $today = date("Y/m/d l H:i:s");
    print($today);
?>
  • 出力結果

 2009/03/10 Tuesday 14:52:40

画像処理

<?php
header("content-type: image/png");
$image = imagecreate(100,100); //横幅と高さ指定

$back = imagecolorallocate($image, 0, 0, 0); //RGBで色指定
$red = imagecolorallocate($image, 255, 0, 0) 
imagepolygon( $image, array( 10, 80, 80,80, 80, 10 ), 3, $red ); //多角形の生成

  imagepng($image); //PNG画像をブラウザに出力
  imagedestroy($image); //メモリのから画像リソースの解放
?>
  • 出力結果

 

  • このサンプルをいつも通りにブラウザで見てもエラーが出た。imgタグで呼び出す必要あり。
  • 多角形生成のimagepolygon()関数の書式は以下。

imagepolygon (画像リソース, array(頂点座標), 頂点総数, 色番号);

  • 気になるのが「$back」というのは画像処理クラスのメンバ変数だったりするのかな。

セッション管理

  • 要は認証ページなどで同一ユーザーであるかの判断が必要な場合の話のよう。

セッション管理では、認証が成功したクライアントに対して、1つの 「セッションID」 を発行します。そのセッションIDをクライアントのクッキー、あるいは URLを書き換えることによって同一ユーザとみなし、セッション中の管理が容易く行えることになります。

  • セッション変数って何度も言ってたらゲシュタルト崩壊しそう。
  • ブラウザは渡されたセッションIDをクライアントに送ることで認証ページへすすめる。許可書の発行ですね。
  • セッション変数に値を格納するのが次の書式。

$_SESSION[セッション変数名] = 値;

  • サーバにはセッションの数だけセッションIDを保存したファイルが生成される。

正規表現

  • 本当にさらっとどんどん進む。
  • 正規表現についてさらっと。
  • 知らなければさっぱり分かんないよなー。

読了

  • つーわけでさらっと全体読みました。本当に概要的な感じ。
  • 詳しくは公式マニュアルで調べろってことかな。
  • もう少し詳細な系統立てたテキストも読んでみたい気がします。
  • もうちょい探してみるか。

*1:シンタックス・ハイライトのファイルタイプをphpにすると「

*2:wikiによると「協定世界時の略称はUTC(Universal Time, Coordinated)である」。協定世界時と順番が違う。