■関数
引数の参照渡し
PHP5もPHP4もデフォルトではコピーで値が渡される。しかし、以下のようにすると参照で渡すことができる。
<?php function sample(&$arg){ $a = 'Mr. '; $a = $a . $arg; $arg .= 'gy'; return $a; } $str = 'Dog'; print(sample($str));//Mr. Dog print($str);//Doggy ?>
但し、以下のようにデフォルト値を設定する方法はPHP5でしか使用できない。
<?php function sample(&$arg = 'John'){ $a = 'Mr. '; $a = $a . $arg; $arg .= 'gy'; return $a; } print(sample($str));//Mr. John ?>
エラー
関数の引数を参照で宣言した場合は、文字列でなく変数で引数を指定しなければならない。
<?php function sample(&$arg){ $a = 'Mr. '; $a = $a . $arg; $arg .= 'gy'; return $a; } print(sample('Dog')); ?>
■オブジェクト
- アクセス修飾詞によってアクセス権をコントロールできる
- クラス定数というクラスに所属した定数を定義できる
- オブジェクトの代入は全て参照で行われる(コピーしたい場合はclone演算子を使用する)
- コンストラクタはクラス名でなく__constructメソッドで実装することが推奨される
- デストラクタが新たに備わった
- インターフェイスや抽象クラスなど実装や継承をさせて使えるようになるクラスができた
- 未定義のクラスが呼び出されたときの挙動を__autoload関数で定義できる
マジックメソッドについて
- mixed __get(mixed $name)
- 存在しないプロパティの値を参照しようとしたときに呼び出される。但し、引数は必ず1つ記述しなければならない。
- void __set(string $name, mixed $value)
- 存在しないプロパティに値を代入しようとしたときに呼び出される。但し、引数は必ず2つ記述しなければならない。
- mixed __call(string $name, array $arguments)
- 存在しなかったメソッドが呼び出されたときに呼び出される。但し、デフォルトではFatal Errorが発生するので、実装しなくても安全である。
- void __clone(void)
- clone演算子が使用されたときの挙動を定義できる。
- void __sleep(void)
- serialize関数が呼び出されたときに、シリアル化の前に呼び出される。
- void __wakeup(void)
- unserialize関数が呼び出されたときに呼び出される。
- bool __isset(string $name)
- 未定義のプロパティに対してissetが使用されたときに実行される。
- void __unset(string $name)
- 未定義のプロパティにunsetが使用されたときに実行される。
- mixed __toString(void)
- クラスがprint関数などで文字列に変換される際の挙動を定義できる。
- mixed __set_state(array $propaty_pairs)
- var_export関数によって エクスポートされたクラスのためにコールされる。
■構文
foreach
foreachは元来配列のコピーを生成する。従って、ループ内で値に操作を加えても元の値は変化しない。しかし、PHP5では値に参照を使用できる。
<?php $ary = array('John', 'Mike', 'Nick'); foreach($ary as $name){ $name = strtoupper($name); } var_dump($ary); /* array(3) { [0]=> string(4) "John" [1]=> string(4) "Mike" [2]=> string(4) "Nick" } */ foreach($ary as &$name){ $name = strtoupper($name); } unset($name); var_dump($ary); /* array(3) { [0]=> &string(4) "JOHN" [1]=> &string(4) "MIKE" [2]=> string(4) "NICK" } */ ?>
但し、この手法を使った場合は、unsetしておくことをお勧めする。
■エラー
例外
例外がサポートされるようになった。
エラーレベル
E_STRICTレベルが新たに追加された。
■新しいエクステンション
- SimpleXML
- XMLを扱う。
- DOMXML,DOMXSL
- XML,XSLを扱う。
- PDO
- データベース抽象化レイヤー。
- SPL
- PHPの言語と相互作用する PHP5 で導入されたクラスライブラリ。
- Reflection
- リファクタリング用クラス。