OSDN Git Service

FIX: リファレンスにまつわるコードを修正
authorsakamocchi <o-takashi@sakamocchi.jp>
Mon, 17 Sep 2012 05:48:48 +0000 (14:48 +0900)
committersakamocchi <o-takashi@sakamocchi.jp>
Mon, 17 Sep 2012 05:48:48 +0000 (14:48 +0900)
commit6575e866f3fd1938601432841d80f82e9d259265
tree7732e94d11d96634b63ede7b71df26356036262a
parentb8776ac243eff9686093eb809fc8a3f1b12675b0
FIX: リファレンスにまつわるコードを修正

1. リファレンス渡しは関数定義でのみ有効であり、関数呼び出しでは致命的なエラーとなる
参照: http://php.net/manual/en/language.references.pass.php
引用: 「注意: 関数コールの際には、リファレンス記号がないことに注意してください。
関数定義にのみリファレンス記号があります。リファレンスで正しく引数を 渡すには、関数定義のみで十分です。以前のバージョンの PHP では
foo(&$a); のような形式で & を利用すると "Call-time pass-by-reference"
という警告が発生していましたが、 PHP 5.3.0 以降では警告は発生しません。 また、PHP 5.4.0 以降では
call-time pass-by-reference 機能自体が削除されたので、 これを使おうとすると fatal エラーが発生します。」

2.callableタイプヒントとして配列宣言をしてオブジェクトのインスタンスとメソッドを渡す場合、配列の一つ目のインスタンスは自動でリファレンス参照として扱われる。
参照: http://php.net/manual/en/language.types.callable.php
引用: 「注意: PHP 4 では、実際のオブジェクトを指すコールバックを作成するには、
コピーではなく参照を使わなければなりませんでした。 詳細は 参照についての説明 を参照ください。」

上記を踏まえ、参照を伴うcall_user_func()/call_user_func_array()、array_merge()の関数呼び出しを修正したほか、より誤解の少ないコードに変更した。
12 files changed:
nucleus/convert/functions.inc.php
nucleus/libs/ACTIONS.php
nucleus/libs/AdminActions.php
nucleus/libs/BODYACTIONS.php
nucleus/libs/BaseActions.php
nucleus/libs/COMMENTACTIONS.php
nucleus/libs/ITEMACTIONS.php
nucleus/libs/MANAGER.php
nucleus/libs/MEDIA.php
nucleus/libs/PARSER.php
nucleus/libs/PLUGIN.php
nucleus/libs/xmlrpcs.inc.php