PHPの設定 MacOSXの場合
参考(http://homepage.mac.com/dnagase/macosx/perlcgi.html MacOSX覚え書き/OSXでCGI,perl,phpを動かす

/etc/httpd/httpd.confの設定

vi httpd.conf

(1)--------------------------------------
#LoadModule php4_module libexec/libphp4.so
   ↓「#」 を削除
LoadModule php4_module libexec/libphp4.so

(2)--------------------------------------
#AddModule mod_php4.c
   ↓「#」 を削除
AddModule mod_php4.c

(3)--------------------------------------
AddType application/x-tar .tgz
   ↓以下の行を追加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

   ↓
システム環境の設定「共有」でweb共有を停止&開始(再起動させるため?)

2.1 PHPスクリプティングことはじめ / 2.2 Hello, World!  (←初版版/改訂版)

test1.php →  test1.php

2.2 変数を使ってみる / 2.5 変数を使う

test2.php → test2.php?hensuu=PHP!

2.3 HTMLに埋め込んで使う / 2.6 HTMLに埋め込んで使う & 2.11 URLで直接引き数を指定する

test3.php → test3.php?hensuu=PHP!

test31.php → test31.php?hensuu=PHP! (すべての行をprint文で)

test32.php → test32.php?hensuu=PHP! / 2.7 すべてのPHPスクリプトの出力として書く

test33.php → test33.php?hensuu=PHP! (print文1行のみで)

test34.php → test34.php?hensuu=PHP! / 2.8 ヒアドキュメントを使う

2.4 ほかのスクリプトに値を渡す / 2.9 フォーム画面を作る & 2.10 フォームから変数を受け取る

test4.php → test4.html

2.5 スクリプトをひとつにまとめる / 2.12 スクリプトをひとつにまとめる

test41.php → test41.php

2.6 処理ロジックを分割する / 2.13 処理ロジックを分割する

test5.php

2.7 疑わしきは検証せよ / 2.14 疑わしきは検証せよ

function ユーザー定義関数
return ひとつの値を戻り値として呼び出し元に返すことができる

test6.php test6t.phpfunc1()もtrue

test7.php

内部関数とユーザー定義関数の名前の重複などは文法的に許されない。
重複する表記を行うと、パーサーが行番号とともにエラー内容を通知してくれる。

2.8 ソースを分割する / 2.15 ソースを分割する

display.inc

2.9 入力のチェック / 2.16 入力値のチェック

input.inc

2.10 複数の値を扱う / 2.17 複数の値を扱う

正規表現
^ 文字列の始まり {n} 直前の文字のn回の繰り返し
$ 文字列の終わり [abc] a,b,cのいずれかの一文字
? 直前の文字の0個または1個の繰り返し [a-z] 小文字1文字
* 直前の文字の0個以上の繰り返し [0-9A-Za-z] 英数字
+ 直前の文字の1個以上の繰り返し [^0-9] 数字以外
| or指定 {m,n} 直前の文字m〜n回の繰り返し
    (...) 正規表現のグループ化

clac.inc

2.11 書式つき出力 / 2.18 書式つき出力

result.inc

test5.php → test8.php

 

3.1 HTML埋め込み型言語

ex01.php

ex02.php

ex03.php

3.2 開始と終了

*<?php 〜 ?>で囲む ex04.php ex05.php

*<script language="php"> 〜 </script>で囲む ex06.php

*<% 〜 %>で囲む ex07.php

*<? 〜 ?>で囲む ex08.php

3.3 ステートメント(文)
 ステートメントは処理の単位。ステートメントはひとつ以上の「式」から構成され、セミコロン(;)で終わる。各ステートメントは大文字でも小文字でも評価される。

 ECHO("これもOK"); ex09.php

3.4 コメント(注釈)
 ステートメントの外側に、C言語またはJava形式のコメントを書くことができる。

echo("処理1"); /* C言語形式のコメント */
echo("処理2"); // Java形式のコメント

ex10.php

3.6 式と型
 型:文脈(プログラムの流れ)においてあらわれた式をどのように扱うかという決まりごと。
 PHPでは以下の型をサポート

 ブール(boolean) / 整数(integer) / 倍精度実数(double) / 文字列(string) / オブジェクト(object) / リソース

3.7 変数
 シンボル名の前にドル記号($)をつけて、関数名などのほかのシンボルと区別する。

3.8 シンボルの命名規則
 PHPスクリプトにおける変数や関数などの識別子。…。

3.9 型の相互変換
PHPでは変数の定義をする際、明示的な型宣言を必要としない。
gettype()関数:変数の型を文字列で返す

ex11.php

3.10 型キャスト

ex12.php

キャストの書式
(int),(integer) 整数へのキャスト
(real),(double),(float) 倍精度実数へのキャスト
(string) 文字列へのキャスト
(array) 配列へのキャスト
(object) オブジェクトへのキャスト

3.11 文字列から数値への変換

PHPは、与えられた文字列の最初の部分が有効な数値データから始まる場合には、一連の文字列を数値として評価しようとする。

ex13.php

3.12 配列

$aという配列がある場合、配列内部の各々の要素は、$a[0],$a[1]などのように、格納されている順番を表す「添字」をつけて表される。

ex14.php

array()は、変数のリストを配列にして返す関数。

ex15.php

連想配列による配列の初期化にもarray()関数を使用した方が便利。
連想配列とは、キーと値のペア。
配列の内部では要素の格納順序は不定であることに注意。

ex16.php

文字列の中で配列参照を行う場合は、配列整数全体を大括弧{}で囲む。

ex17.php

3.13 多次元配列

多次元配列の指定は、配列のキーのあとにさらにキーをつけるだけ。

ex18.php

ex19.php

3.14 可変変数

kahen.php

3.15 参照による代入

参照により代入を行うには、代入する変数の頭にアンパサンド(&)をつける。

ex20.php

ex21.php 文法エラーがでる

3.16 定数

エスケープシーケンス

記述 意味
\n 改行(ラインフィールド)
\r 復改(キャリッジリターン)
\t 水平タブ
\\ バックスラッシュ
\$ ドル記号
\" 二重引用符
\[0-7]{1,3} 8進数表記の1文字。8進数は\666のようにして表す
\x[0-9A-Fa-f]{1,2} 16進数表記の1文字。16進数は\xFFのようにして表す

定数シンボル名は、先頭に $がつかないこと以外は変数シンボルと同じ命名規則にしたがうが、慣習的に大文字で記述する。定数シンボルの定義を追加するにはdefine()関数を使う。

ex22.php ex22ne.php(エラー部分無し)

3.17 関数

ex23.php

ex24.php

list()は、単一の操作で複数の変数に値を入れるための言語構造(厳密には関数でない)

3.18 引数

引数により関数へ情報を渡すことができる。
関数側で用意した、引数を受け取るための変数を仮引数(argument)、呼び出し側で実際に指定する変数や定数を実引数(parameter)と呼ぶ。引数は、カンマで区切られた変数や定数のリストのこと。

ex25.php

* 引数の参照渡し
関数側で呼び出した側の引数(実引数)の内容を書き換えることができるようにするには、アンパサンド(&)を仮引数の前に付加することで、その引数を参照渡しとして定義する。もちろん実引数は変数。定数を渡すとエラーになる。

ex26.php

* デフォルト引数
関数に対して期待する個数の引き数が渡されないために、デフォルトの値を指定しておくことができます。

ex27.php

デフォルト値は定数式である必要があり、変数や、後述するクラスのメンバであってはならない。
すべてのデフォルト値の定義は、デフォルト値をもたないすべての引き数の右側にある必要がある。

ex28.php

ex29.php

3.19 変数のスコープ(有効範囲)

変数のスコープは、その変数が定義されたコンテキスト(文脈)。
ユーザ定義関数の外で定義されるPHP変数は大域(グローバル)スコープになる。ユーザ定義関数の内部で定義される変数は閉域(ローカル)スコープに制限されており、その関数の内部だけで有効。

ex30.php

関数内でグローバル変数を使用する場合は、関数の内部でglobal命令により明示的にグローバル変数として宣言する必要がある。(ただし、スーパーグローバル変数($_GET,$_POST,$_REQUEST,$_SESSION,$GLOBALS)については、global宣言しなくても使える。)

ex31.php

ex32.php

ex33.php

関数内で初回のみ初期化を行う場合は、static変数を使う。

3.20 演算子

* 算術演算子

名前
式の値
$a + $b
加算
$aと$bの和
$a - $b
減算
$aと$bの差
$a * $b
乗算
$aと$bの積
$a / $b
除算
$aと$bでの商
$a % $b
剰余
$aを$bで割った余り(整数)
++$a
前置加算
$aに1を足してから評価する
$a++
後置加算
$aを評価してから1を足す
--$a
前置減算
$aから1を引いてから評価する
$a--
後置減算
$aを評価してから1を引く

ex34.php

* ビット演算子

名前
式の値
$a & $b
論理積(and)
$aおよび$bの両方が1であれば1
$a | $b
論理和(or)
$aまたは$bのどちらかが1であれば1
$a ^ $b
排他的論理和(xor)
$aと$bが異なる場合に1
~$a
否定(not)
$aが1なら0、0なら1
$a << $b
左シフト
$aのビットを左に$bビットずらす
(算術的には「2をかける」ことを意味する)
$a >> $b
右シフト
$sのビットを右に$bビットずらす
(算術的には「2で割る」ことを意味する)

ex35.php

0xff(16進数のff)は、下8ビットがすべて1の値。

* 文字列演算子

文字列結合演算子( . )

ex36.php

* 代入演算子

名前
式の値
$a = $b
代入
$aに$bの値を代入。$aの型は$bと同じになる
$a += $b
加算代入
$aに$bの値を加算。両辺とも数値とみなされる(以下同様)
$a -= $b
減算代入
$aから$bの値を減算
$a *= $b
乗算代入
$a*$bの値を$aに代入
$a /= $b
除算代入
$a/$bの商を$aに代入
$a %= $b
剰余代入
$a/$bの剰余(整数)を$aに代入
$a &= $b
And代入
$a&$bの値を$aに代入
$a |= $b
Or代入
$a|$bの値を$aに代入
$a .= $b
連結代入
$aに$bの値を連結。両辺とも文字列とみなされる
$a =& $b
参照代入
$aに$bの記憶域のアドレスを代入。$bが$aを指すようになる
$a <<= 1
左シフト
$aの内容を左に1ビットシフト
$a >>= 1
右シフト
$aの内容を右に1ビットシフト

ex37.php

* 比較演算子

比較演算子による式は、TRUEまたはFALSEいずれかの真偽値をとる。

ex38.php

* 三項演算子

printf (%s, $first ? $second : $third );
$firstの評価結果がTRUEの場合、$secondが評価され%sに反映される。そうでない場合、$thirdが評価される。

ex39.php

* 論理演算子

名前
式の値
$a and $b
論理積
$aおよび$bの両方がともに真の場合に真
$a or $b
論理和
$aまたは$bのどちらかが真の場合に真
$a xor $b
排他的論理和
$aまたは$bのどちらかが真でかつ両方とも真でない場合に真
!$a
否定
$aが真でない場合に真
$a && $b
論理積
$aおよび$bがともに真の場合に真
$a || $b
論理和
$aまたは$bのどちらかが真の場合に真

* 実行演算子

バッククォート( ` )をサポート。バッククォートの中身をシェルコマンドとして実行し、その出力を返す。

ex40.php

実行演算子と類似の機能をもつ組み込み関数として、system()、passthru()、exec()、popen()、escapeshellcmd()がある。

3.21 演算子の優先順位

優先度
結合時の評価
演算子


,
or
xor
and
print
= += -= *= /= .= %= &= |= ^= ~= <<= >>=
? :
||
&&
|


 

^
&
結合しない
== !== ===
結合しない
< <= > >=
<< >>
+ - .
* / %
! ~ ++ -- (int) (double) (string) (array) (object) @
[
結合しない
new

3.22 制御構造

* IF〜ELSEIF〜ELSE〜ENDIF

IF文は命令の条件実行を行う。

ex41.php

ex42.php

* WHILE〜ENDWHILE

WHILE文は、条件式の値が真である間、ブロック中の処理を繰り返し実行する。

ex43.php

ex44.php

ENDIFと同様に、ENDWHILE構文もある。

ex45.php

* DO〜WHILE

DO〜WHILEループは、各繰り返しの最後に論理式のチェックを行う。このためWHILEループとは異なり、最低1回のループ実行が保証される。

ex46.php

* FOR

ex47.php

* BREAK

BREAK文は、WHILE、DO〜WHILE、FORループ構造およびSWITCHの内部で、現在のループ構造を脱出するのに使用する。
引数としてネストレベルを指定することにより、ネストした(入れ子になった)任意のループから脱出ができる。

ex48.php

* CONTINUE

CONTINUE文はループ構造の始めまでジャンプする。

ex49.php

* SWITCH

SWITCH文は同じ変数を異なる値と比較し、値に応じて異なった処理を実行する。

ex50.php

* FOREACH

配列要素に対する反復処理を行う。

FOREACH(配列表現 as $value)文 ←要素の値が$valueに代入される
FOREACH(配列表現 as $key => $value)文 ←要素のキーも$keyに代入される

ex51.php

ex52.php

* REQUIRE

REQUIRE文は、自分自身を指定したファイルで置き換える。????

<?php
REQUIRE('header.inc');
?>

* INCLUDE

INCLUDE文は指定したファイルを読み込み、評価する。INCLUDE文が処理されるたびにファイルの読み込みが行われる。

<?php
$files = array('first.inc', 'second.inc', 'third.inc');
for ($i=0; $i<count($files); $i++){
  include($files[$i]);
}
?>

3.23 クラスとオブジェクト

変数と、それに附随する固有の手続きをカプセル化したものをクラスと呼ぶ。クラスを使うためには、そのクラスの型を持つ変数を生成する必要がある。(new命令)
クラスの宣言はclass命令で始まり、var命令でクラス内部でのみアクセス可能な変数を定義。(メンバ変数)
メンバ関数からメンバ変数にアクセスするには $this-> メンバ変数名 という書式でアクセス。
クラス内部からメンバ関数を呼び出すのにも $this-> メンバ関数名 という書式を使う。

ex53.php

ex54.php

クラスと同じ名前を持つ関数を「コンストラクタ(constructor−構築子)」と呼ぶ。

ex55.php

派生クラスを定義する場合、extends命令で基底クラスの名前を指定する。
change()メンバ関数で新たに定義した方が呼ばれていうことを確認!

3.24 スーパーグローバル変数

変数名
従来の名前
用途
$_SERVER $HTTP_SERVER_VARS 実行環境情報などを保持する
$_ENV $HTTP_ENV_VARS 環境変数
$_POST $HTTP_POST_VARS HTTP POST メソッドで与えられた変数
$_GET $HTTP_GET_VARS HTTP GET メソッドで与えられた変数
$_COOKIE $HTTP_COOKIE_VARS HTTP クッキーを通して与えられた値
$_FILES $HTTP_FILES_VARS ファイルアップロード時にセットされる
$_REQUEST (なし) GET/POST/COOKIE/FILES の内容を保持する
$_SESSION (なし) セッション管理対象の変数名とその値を保持する

$_POST[変数名]で入力を受け取る

4.1 実用的なサンプル

test9.php

expand.inc