PHP5.4 に移行した後、コード内の多くの「悪い習慣」をクリーンアップする必要があります。
拡張メソッドでの厳密に型指定されたパラメーターの定義
これは、変数名の直前にメソッドが受け取るオブジェクトのクラスを記述する必要があることを意味します。これは、すべてのメソッドではなく、親のクラス メソッドを置き換えるメソッドにのみ必要です。不明な場合は、コア ファイルまたは API の親クラスのメソッド宣言を確認してください。
// Behavior code
public function afterSave(Model $model, $created) //GOOD
function aferSave($model) //NOT GOOD
// Component code
public function shutdown(Controller $Controller) // GOOD
function shutdown($Controller) // BAD
「呼び出し時の参照渡し」を削除
私は多くの人がコントローラーとモデルオブジェクトを参照によって関数で渡しているのを見てきました:
function beforeSave(&$Model)
これはエラーをスローし、間違っています。変数の前のアンパサンドを削除するだけです。オブジェクトはすでに PHP で参照によって渡されているため、機能を壊すことはありません。私が理解しているように、これは PHP 5.4 で削除されました。
メソッドの拡張ですべてのメソッド パラメータを宣言する
親クラスのメソッドを上書きする場合は、関数定義ですべての関数パラメーターを宣言する必要があります。パラメータが欠落している場合、エラーが発生します。
例:
SomeBehavior extends ModelBehavior
public function afterSave(Model $Model){ } //WRONG, but works in 5.3
public function afterSave(Model $Model, $created){ } //RIGHT, works everwhere :)
App::load() を追加して依存関係をロードします
クラスが実際に利用可能かどうかを常に確認することをお勧めします。そのため、依存するすべてのクラスがファイルの先頭にあるApp::load()でロードされているかどうかを再確認してください。