最終更新:2011-12-03 (土) 06:51:27 (4522d)  

PHP 5.3
Top / PHP 5.3

http://jp2.php.net/manual/ja/migration53.new-features.php

リリース

  • PHP 5.3.0 - 2009/06/30
  • PHP 5.3.1 - 2009/11/19
  • PHP 5.3.2? - 2010/03/04
  • PHP 5.3.3? - 2010/07/22
  • PHP 5.3.4? - 2010/12/09
  • PHP 5.3.5? - 2011/01/06
  • PHP 5.3.6? - 2011/03/17
  • PHP 5.3.7 - 2011/08/18
  • PHP 5.3.8 - 2011/08/23

新機能

  • 名前空間 のサポートが追加されました。
  • 遅延静的束縛 のサポートが追加されました。
  • ジャンプラベル (制限付きgoto) のサポートが追加されました。
  • クロージャ (ラムダ/無名関数) のサポートが追加されました。
  • マジックメソッドが二つ追加されています。 __callStatic と __invoke です。
  • Nowdoc 構文がサポートされました。これは ヒアドキュメント のように動作しますが、シングル-クォートで囲まれた文字列として扱われます。
  • ヒアドキュメント 構文は、静的な クラスメンバ/定数 を初期化できるようになりました。
  • ヒアドキュメント 構文は、ダブルクォートを使って宣言できるようになりました。
  • 定数 はクラスの外でも const キーワードを使って宣言できるようになりました。
  • 三項演算子 の短縮形式として ?: が使えます。
  • HTTPストリームラッパー は、200 から 399 までのステータスコードを成功したものとみなすようになりました。
  • 静的なメソッドに動的にアクセスできるようになりました。
  • 例外 の捕捉がネストできるようになりました。
  • ガベージコレクタ? が追加され、デフォルトで有効になりました。

下位互換性のない変更点

既存の PHP5 のコードのほとんどは変更なしで動作するはずですが、 以下の下位互換性のない変更点については注意しましょう。

  • 引数を解釈する内部API が、PHP 5.3.x に同梱されている全ての拡張機能に 適用されるようになりました。つまり、互換性のないパラメーターが渡された場合、 この引数を解釈するAPIは NULL を関数に返させます。これにはいくつか例外が あります。たとえば get_class?() 関数はエラーが起きた場合に 以前と同様 FALSE を返します。
  • clearstatcache() 関数は、デフォルトで絶対パスキャッシュの値をクリアしなくなりました。
  • realpath() 関数はプラットフォーム依存でなくなり、全てのプラットフォーム上で 同じ動作をするようになりました。
  • call_user_func?() 関数 とその仲間は、呼び出し先が親クラスであっても $this の値を伝播させるようになりました。
  • 配列処理関数 natsort(), natcasesort(), usort(), uasort(), uksort(), array_flip() そして array_unique() は、 引数としてオブジェクトを受け入れなくなりました。オブジェクトを使ってプロパティにアクセス する必要がある場合、オブジェクトを配列型にキャストする必要があります。
  • 引数を参照渡しする関数に値を渡した場合の振る舞いが変更されました。 以前は値渡しとして引数を受け取っていましたが、今は fatal error が発生するようになりました。 参照渡しを期待している関数に定数やリテラルを渡していたコードは、 いったんその値を変数に代入してから関数に渡すよう書き換える必要があります。
  • 新しい mysqlnd ライブラリは、MySQL 4.1 用の41バイトの新しいパスワードフォーマットを使用します。 古い16バイトのパスワードを使うと、mysql_connect() 系の関数は次のようなエラーメッセージを生成します。"mysqlnd cannot connect to MySQL 4.1+ using old authentication"
  • 新しい mysqlnd ライブラリは、mysql の設定ファイル (my.cnf/my.ini) を読み込まなくなりました (以前の libmysql は読み込んでいました)。 もし設定ファイルの内容に依存するコードを書いているのなら、 mysqli_options() 関数で明示的に読み込む必要があります。 SplFileInfo?クラス と他のディレクトリ関連クラスは、 末尾の / を除去するようになりました。
  • __toString マジックメソッドは引数をとらなくなりました。
  • 以下のマジックメソッド __get, __set, __isset, __unset および __call は常に public にすべきです。また、static でないメソッドとしても定義できます。 メソッドのシグナチャは強制されます。
  • マジックメソッド? __call? は、private や protected のメソッドに対するアクセスでも呼び出されるようになりました。
  • 次に示すキーワードは予約語となり、関数名やクラス名などの識別子の名前として使えなくなりました。
  • goto
  • namespace

PHP 5.3.x で推奨されない機能

  • call_user_method?() (かわりに call_user_func?() を使用します)
  • call_user_method_array?() (かわりに call_user_func_array?() を使用します)
  • define_syslog_variables?()
  • dl?()
  • ereg?() (かわりに preg_match() を使用します)
  • ereg_replace?() (かわりに preg_replace() を使用します)
  • eregi?() (かわりに preg_match() で 'i' 修正子を使用します)
  • eregi_replace?() (かわりに preg_replace() で 'i' 修正子を使用します)
  • set_magic_quotes_runtime?() およびそのエイリアスである magic_quotes_runtime?()
  • session_register?() (かわりにスーパーグローバル $_SESSION を使用します)
  • session_unregister?() (かわりにスーパーグローバル $_SESSION を使用します)
  • session_is_registered?() (かわりにスーパーグローバル $_SESSION を使用します)
  • set_socket_blocking?() (かわりに stream_set_blocking?() を使用します)
  • split() (かわりに preg_split?() を使用します)
  • spliti?() (かわりに preg_split?() で 'i' 修正子を使用します)
  • sql_regcase?()
  • mysql_db_query?() (かわりに mysql_select_db?() および mysql_query?() を使用します)
  • mysql_escape_string?() (かわりに mysql_real_escape_string?() を使用します) ロケールカテゴリ名を文字列で渡すこと。かわりに LC_* 系の定数を使用します。
  • is_dst?mktime?() に渡すこと。 かわりにタイムゾーン処理用の新しい関数を使用します。

http://www.php.net/manual/ja/migration53.deprecated.php

PHP V5.3 では Unicode に関して何が新しいのか

PHP 5.3ラムダクロージャを活用する

参考