「PHP入門」を読む その1

PHP入門←教材はここ!

いつものように教材を読みながらポイント書き出したり思ったこと書き並べます。

PHPとは

  • PHP is Hypertext Pre-processer」*1の略だと。なるほどHTML(Hypre Text Markup Language)と相性いいのは当たり前か。
  • PHPのメリットとしてあげられているのは以下。
    • (CGIと比べて)実行が早く負荷が小さい。
    • 簡単、デバッグが楽。
    • どのような種類のデータベースとも接続可能。

PHPの実体は、Webサーバに置かれるソフトウエアの Apacheモジュールとして動作するスクリプト言語を実行する環境を指します。HTML文書中に記述されたスクリプトPHPが実行し、結果を HTMLデータとしてWebブラウザに出力する仕組みがあります。

PHPとは

PHP制作環境の設定

これは前回Mac上での動作を確認してるのでスルー。

PHPスクリプトの基本構造

  • 早速以下のサンプルコードを確認してみました。
  • コード
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" 
        content="text/html; charset=UTF-8"> <!-- Shift_Jisから変更 -->
<title>PHP入門</title>
</head>

<body>
<p>今日は、<?php echo date("Y/m/d"); ?> です。</p>
</body>
</html>
  • 出力結果

今日は、2009/03/09 です。

  • サンプルのままだと文字化けしたので文字コードUTF-8に変更した。多分Macだからかな。
  • とにかくphpファイルをブラウザで見る時は「ファイルを見る」でファイル指定するのではなく。URLを「http://localhost/~username/test1.php」と指定しないとphpが動作しない模様。

定数と変数

  • 定数の定義にはdefine()関数
  • 書式

 define("定数名","値");

  • サンプル
  <?php
     define("banban", "ばんばん");
     print(banban);                // 定数banban の中身を表示する
  ?>
  • 変数定義には「$」を用いる。
  • 書式

$変数名 = 変数に代入する値

  • サンプル 論理値

  $banban = true;

  • サンプル 整数

  $banban = 2000;

  $banban = 3.14159265;

  • サンプル 文字列

  $banban = "ばんばんは当サイトの作者のハンドルネームです";

  • ずっと「banban」って何かなーと謎だったんで最後に分かりました。
  • これからはバンバン先生と呼びます。

PHPの変数名は、先頭に数字があってはいけません。基本的には、大文字と小文字を区別しませんが、対象によって異なる場合があります。

  • PHPで利用できる命名の文字
    • a 〜 z
    • A 〜 Z
    • 0 〜 9 (先頭には利用できない)
    • 0x7F 〜 0xFF までのコードを持つ文字
    • _ (アンダーバー)
  • なんと日本語も使えるらしい。使いたくないけど、怖いから。

配列

  • 一番簡単な配列への代入法。
 <?php
   $banban[] = "HTML";
   $banban[] = "XHTML";
   $banban[] = "XML";
  ?>
  • これだと順番にインデックス0から2までに格納できる。
  • array()関数を使うと一度に記述できる。
 <?php
   $banban = array("HTML", "XHTML", "XML", "XSLT", "RSS");
    print($banban[1]);
 ?>
  • 出力結果

 XHTML

  • インデックスの区切り文字を指定して配列に格納していくのがexplode()関数。
<?php
   $banban = explode(",", "HTML,XHTML,XML,XSLT,RSS");
    print($banban[3]);
 ?>
  • 出力結果

 XSLT

  • これは本当に実用性がありそうな関数。
  • 連想配列としてインデックスに文字列を使うことも可能。
  • この場合ループで要素を書き出す時に少し面倒。list()echo()関数を使うらしい。
  • サンプル
<?php
  $fruit = array("Apple" => "りんご", "Orange" => "みかん", 
                 "Grape" => "ぶどう");
    while(list ($key, $val) = each($fruit)) {
      print ("インデックスの $key は、$val です<br>\n");
     }
?>
  • 出力結果

インデックスの Apple は、りんご です
インデックスの Orange は、みかん です
インデックスの Grape は、ぶどう です

  • ここで使われてるlist()関数について分かんないとよく飲み込めないんでそっちも参照してみた。
  • 書式

  list(変数) = array (インデックス);

  • サンプル
list($orange,$apple,$grape) = array("りんご", "みかん", "ぶどう");
  print ("$orange $apple $grape");
  • 出力結果

 りんご みかん ぶどう

  • どうやらlist()関数は、配列の中身を変数に代入する関数。
  • でもこれだけだと連想配列のサンプルがいまいちわからないんでecho()関数も参照。
  • 書式

each (配列);

  • サンプル
$fruit = array("りんご"=>123, "みかん"=>456, "ぶどう"=>789);
	print_r( each($fruit) );
  • 出力結果

Array ( [1] => 123 [value] => 123 [0] => りんご [key] => りんご )

  • echo()の説明が短すぎて分かりにくいけど、多分配列の一個目の要素について出力してるっぽい。
  • 出力結果のうち「value」と「key」は意味分かるけど「1」と「0」はなんだろ?
  • 単純に「[1]=[value」、「[0]=[key]」なのかな?
  • あとprint_rって言うのも気になったんで参照。

引数で指定された変数の情報を参照します。文字列、整数、倍精度実数を指定した場合には、その値を出力します。配列やオブジェクトを指定した場合には、キーとインデックスを示す形式で出力します。

  • 出力結果を見てみると配列のインデックスと要素を返してます。

演算子

  • このあたりはだいたいほかの言語でもいっしょなので流し読み。
  • ただひとつ「.=」という「連結して代入する」というのが気になったので以下のようなサンプルを作って走らせてみた。
  • サンプル
<?php

  $x = 10;
  $y = 20;

  $x .= $y;

  print("最終的に x= $x <br>\n");


  $a = "ABC";
  $b = "abc";

  $a .= $b;

  print("最終的に a= $a <br>\n");


  $a.=$a;

   print("aにaを連結代入すると a= $a <br>\n");


?>
  • 出力結果

 最終的に x= 1020
 最終的に a= ABCabc
 aにaを連結代入すると a= ABCabcABCabc

  • 単純に文字列として連結していくということかな。

*1:こういうネーミングを再帰的頭字語というらしい