PHP 5.
互換性に注意が必用な変更
モジュール関数のパラメータに互換性の無いデータ型を渡すと、
NULLを返します。以前のPHPではFALSEを返していました。一部に例外があり、 get_ class()等ではFALSEを返します。 clearstatcache関数がデフォルトでrealpathキャッシュをクリアしなくなりました。
realpath関数がプラットフォームに依存しなくなりました。
call_
user_ func関数が親クラスからの呼び出しでも$thisが渡されるようになりました。 配列関数
(natsort、 natcaserot、 usort、 uksort、 array_ flip、 array_ unique) がオブジェクトを引数として受け付けなくなりました (古いPHPとの互換性のためにオブジェクトも配列として扱っていた関数が、 ほかの新しい配列関数と同じ動作になった)。 mysqlndライブラリはMySQL 4.
1の41バイトパスワードを利用しています。古い16バイトパスワードの場合は接続できません。 ディレクトリクラスとSplFileInfoのディレクトリ名から最後の
“/” が取り除かれます。 __
toStringメソッドがパラメータを受け付けなくなりました。 __
get、 __ set、 __ isset、 __ unset、 __ callは常にpublicとなりstaticとして定義出来なくなり、 必ず既定の引数が必用です。 private、
protecedのメンバー変数へのアクセスには__ callメソッドが呼び出されるようになりました。 gotoとnamespaceが予約語に追加されました
(関数、 クラス等の名前に利用できません)。
PHP 5.3の新機能
目玉機能として紹介した機能は名前空間、
このほかにも様々な機能が追加されています。
- php.
iniの強化 - __
callStaticと__ invokeマジックメソッドの追加 - Nowdoc構文の追加
- Heredoc構文の書式の追加
- 定数定義の方法
- 3項演算子の省略形
- HTTPストリームラッパーのステータス処理
- 入れ子の例外
- ガーベッジコレクタの追加
- E_
DEPRECIATEDの導入 - Windowsサポートの強化
- 新しいモジュール
php.iniの強化
php.
CGI
HOSTセクション
HOSTセクションはホスト名でアクセスした場合に有効になる設定です。
[HOST=development.example.jp]
error_reporting = E_ALL | E_STRICT
display_errors = On
Aapche/
PATHセクション
PATHセクションは特定のパスの場合に読み込まれるphp.
[PATH=/www/public/old_app/]
auto_prepend_file=/www/lib/security_check.php
マジックメソッドの追加
オブジェクトの動作を制御するための特殊メソッド__
__callStatic
以前のPHPはstaticな呼び出し時に__
<?php
class Test {
public function __call($name, $arguments) {
echo "NORMAL".PHP_EOL;
}
public static function __callStatic($name, $arguments) {
echo "STATIC".PHP_EOL;
}
}
$obj = new Test;
$obj->foo('in object context');
Test::foo('in static context');
?>
NORMAL STATIC
__invoke
__
<?php
$obj = new Foo;
$obj('Hello World');
?>
例えば、
<?php
class Foo {
function __invoke($msg) {
echo $msg;
}
}
?>
このようなオブジェクトの呼び出しをサポートしている言語もあります。ポートする場合等には便利でしょう。
Nowdoc構文の追加
Heredoc構文を利用した場合、
Nowdoc構文を利用する場合、
<?php
$var = 'FOO';
echo <<< 'EOD'
$var is not parsed
EOD
?>
$var is not parsed
Heredocを利用した場合、
Heredoc構文の書式の追加
Nowdocの導入により、
<?php
$var = 'FOO';
echo <<< "EOD"
$var is parsed
EOD
?>
FOO is parsed
定数定義の方法
これまでのPHPはdefine文によって定数を定義しました。クラスの中ではconst文で定義できました。
PHP 5.
define文は定数定義をランタイムに行っています。次のような単純な定数定義でも実行時に評価されています。
define('VAR', 'XYZ');
ランタイムに評価するため、
define('VAR', somefunction());
関数型言語でよく見られる、
一方、
const VAR=somefunction();
のような場合、
PHPはスクリプト型言語なので普段はコンパイル時の評価と実行時の評価を区別して気にする必用はありません。しかし、
3項演算子の省略形
3項演算子の
echo 'abc' ?: 'xyz'; // abcを出力
様々な使い方が考えられますが、
<?php
function foo($param) {
return --$param ?: trigger_error('$param cannot be 1');
}
foo(1);
?>
Notice: $param cannot be 1 in /home/yohgaki/ext/src/php/php-5.3.0/- on line 3
HTTPストリームラッパーのステータス処理
HTTPラッパーはステータスが200から399まで値の場合、
入れ子の例外
入れ子の例外処理が記述できるようなり、
<?php
class MyException extends Exception { }
class Test {
public function exceptionTest() {
try {
try {
throw new MyException('FOO');
} catch (MyException $e) {
/* もう一度throwすると上レベルのcatchでcatch */
throw $e;
}
} catch (Exception $e) {
var_dump($e->getMessage());
}
}
}
$foo = new Test;
$foo->exceptionTest();
?>
string(3) "FOO"
ガーベッジコレクタの追加
ガーベッジコレクタが実装され、
E_DEPRECIATEDの導入
廃止予定の機能を利用した場合に、
また、
Windowsサポートの変更箇所
Windowsサポートが大幅に向上しました。WindowsではDNS関数がサポートされなかったり、
IISのISAPIモジュールとして動作するPHPは削除されました。これはマルチスレッドサーバ上のモジュールとして動作させた場合、
以前よりISAPIの利用よりFastCGI SAPIの利用が勧められていました。ISAPIを利用していた方は、
Windows版の互換性
PHP 5.
- Windows 2000以降のWindows
(Windows 98、 ME、 NT4サポートの廃止) - i586以上のCPU
(バイナリ配布版) - 64bit版Windowsサポート
- Virual C++ 9サポート
- PDOのOracleドライバがOracle10/
Oracle11用ライブラリを使用 (バイナリ配布版) - OCI8モジュールに複数バージョンをサポート
(バイナリ配布版)
新しくWindows版でサポートされた関数
DNS関連関数
- checkdnsrr()
- dns_
get_ record() - fnmatch()
- getmxrr()
パラメータのパース
- getopt()
イメージ関数
- imagecolorclosesthwb()
インターネットアドレス関数
- inet_
ntop() - inet_
pton()
ファイル関数
- link()
- linkinfo()
- readlink()
- symlink()
暗号関数
- mcrypt_
create_ iv()
ソケット関数
- socket_
create_ pair() - stream_
socket_ pair()
スリープ関数
- time_
nanosleep() - time_
sleep_ until()
Windows版のその他の変更と注意点
ファイル関数、
symlink関数はWindows Vista以降で利用できます。当然ですが、
Windows版のPHPではWindowsのバージョンや実行環境を定義した定数が利用可能になりました。
定数 | 説明 |
---|---|
PHP_ | 5(XP/ |
PHP_ | マイナーバージョン |
PHP_ | ビルド番号 |
PHP_ | 2(Vista/ |
PHP_ | サービスパック番号 |
PHP_ | サービスパックマイナー番号 |
PHP_ | インストールされている機能 |
PHP_ | 製品タイプ |
PHP_ | ドメインコントローラ |
PHP_ | SERVERシステム |
PHP_ | WORKSTATIONシステム |
php.ini設定の変更
全てでは無いと思いますが、
追加されたphp.ini設定
設定名 | 説明 |
---|---|
cgi. | CGIのパス情報を破棄 |
mail. | mail()にX-HEADERを追加 |
mail. | mail()のログ設定 |
user_ | ini設定のキャッシュ時間 |
user_ | user. |
mysqli. | PHPクライアント側のキャッシュスロット数 |
mysqli. | ロカールファイルに対するLOAD DATAの使用 |
仕様変更されたphp.ini設定
設定名 | 説明 |
---|---|
short_ | スクリプトから設定変更が可能になった |
open_ | スクリプトから設定変更が可能になった |
削除されたphp.ini設定
設定名 | 説明 |
---|---|
zend. | ZendEngine1との互換モード |
zend_ | 代わりにzend_ |
PHP 6で削除予定のphp.ini
- allow_
call_ time_ pass_ reference - define_
syslog_ variables - register_
globals - detect_
unicode - magic_
quotes_ gpc - magic_
quotes_ runtime - magic_
quotes_ sybase - enable_
dl (CGI/ CLI/ Embed以外は5. 3から実質的に無効) - highlight.
bg - safe_
mode - safe_
mode_ allow_ env_ vars - safe_
mode_ exec_ dir - safe_
mode_ gid - safe_
mode_ include_ dir - safe_
mode_ proteced_ env_ vars - session.
bug_ compat_ 42 - session.
bug_ compat_ warn