その他
2011年7月7日
PHP5.4 alpha1リリース! PHP5.3からの新機能を見わたす
こんにちは、久保田です。
先月6月28日、PHP5.4 alpha1がリリースされました。PHP5.3では、名前空間や無名関数の追加など、言語機能に大きな追加が行われました。PHP5.4 alpha1 ではtraitが実装され、オブジェクト指向言語としてのPHPに大きな機能追加が行われました。他にも、<?=記法のデフォルト有効化、array dereferenceの追加、無名関数内の$thisの扱いの変化、JsonSerializableインターフェイスの追加など筆記すべき様々な機能追加、改善が見られます。この記事ではPHP5.4 alpha1で見えてきた新機能をサンプルコードを交えながら概観します。
とりあえずNEWSを訳す
PHP5.4 alpha1の変更点を記述した NEWS ファイルを翻訳してみたのが以下です。
PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20 Jun 2011, PHP 5.4.0 Alpha 1
- autoconf2.59以上が ./buildconf によるconfigureスクリプトの生成のために
サポート(そして要求)されるようになった。configureスクリプトのhelpの順番が
おかしくなるかもしれないのを避けるために、autoconf2.60以上が望ましい。 (Rasmus, Chris Jones)
- 古い機能の削除:
. break/continue $var 文法。 (Dmitry)
. safeモードとそれに関連する全てのiniオプション。 (Kalle)
. register_globalsとregister_long_arraysのiniオプション。 (Kalle)
. import_request_variables関数。 (Kalle)
. allow_call_time_pass_reference iniディレクティブ。 (Pierrick)
. define_syslog_variables iniオプションとそれに関連する関数。 (Kalle)
. highlight.bg iniオプション。(Kalle)
. セッションバグ互換モード (session.bug_compat42 と session.bug_compat_warn iniオプション). (Kalle)
. session_is_registered関数、session_register関数、 session_unregister関数 (Kalle)
. y2k_compliance iniオプション (Kalle)
- PECLに移動したエクステンション: (Johannes)
. ext/sqlite.(訳注: sqlite3の拡張とは別です)
- $_SERVER['REQUEST_TIME']が正確なマイクロ秒を含むように変更 (Ilia)
- "default_charset" php.iniオプションをISO-859-1からUTF-8に変更 (Rasmus)
- array_combine()のパラメータに二つとも空の配列を渡したときにfalseの代わりに
空の配列を返すように変更。FR #34857。 (joel.perras@gmail.com)
- preg_match_all関数の三番目のパラメータをオプションに変更。FR #53238. (Adam)
- プロパティの追加の際にwarningに鳴ったときにnullかfalseに暗黙的にキャストされるのを変更。 (Scott)
- <?=記法は今やshort_tags設定に関わらず常に利用できる。 (Rasmus)
- 一般的な改善:
. デフォルトでのマルチバイトのサポート。以前はphpをコンパイルする際に
--enable-zend_multibyte を 使わなければならなかった。
今ではこれを無効/有効にするには、php.iniのzend.multibyteディレクティブを通じて行う。 (Dmitry)
. ext/mbstringからのコンパイル時の依存性を削除。 (Dmitry)
. traitのサポートを追加。 (Stefan)
. クロージャで再び$thisがサポートされた (Stas)
. 配列の デリファレンスのサポートを追加。 (Felipe)
. 配列を通じた非直接的なメソッド呼び出しをできるようにした。FR #47160。 (Felipe)
. 再帰的なserialize関数の呼び出しでのオブジェクトのリファレンスのサポートを追加。 FR #36424。 (Mike)
. http_response_code関数の追加。FR #52555。 (Paul Dragoonis, Kalle)
. HTTPヘッダを送ったりデフォルトのHTTPヘッダが追加された後に優先的かつ即座に呼び出す関数を登録するheader_register_callback関数の追加。 (Scott)
. DTraceサポートの追加。 (David Soria Parra)
. 内部のアウトプットレイヤの改善。詳しくは README.NEW-OUTPUT-API を見ること。 (Mike)
. unserialize関数のパフォーマンスの改善。
(galaxy dot mipt at gmail dot com, Kalle)
. unix用のビルドシステムが複数のPHPバイナリSAPIとひとつのSAPIモジュールを同時にビルド出来るようにした。 FR #53271, FR #52410。 (Jani)
. debug_backtrace関数とdebug_print_backtrace関数に返すスタックフレームの量を制限するオプションパラメータを追加。 (Sebastian, Patrick)
. ストリームのメタデータAPIサポートとストリームクラス内のstream_metadata()ハンドラの追加。 (Stas)
- Zendエンジンのメモリ使用量の改善: (Dmitry)
. zend_function.pass_rest_by_referenceをZzend_function.fn_flagsのEND_ACC_PASS_REST_BY_REFERENCEに置き換えた。
. zend_arg_info.required_num_argsの削除。といのも、これは内部関数(internal function)の為だけに必要とされるため。
現在では、内部関数のための最初のarg_info(特別な意味を持つ)は、zend_internal_function_info構造体によって表される。
. zend_op_array.size, size_var, size_literal, current_brk_cont, backpatch_count はコンパイル時にのみ利用するものなので CG(context) に移動した。
. zend_op_array.start_op はひとつのトップレベルop-arrayのインタラクティブシェルでの実行時のみ使われるものなので EG(start_op) に移動した。
. zend_op_array.done_pass_twoをzend_op_array.fn_flags内のZEND_ACC_DONE_PASS_TWO に置き換えた。