

AサーバーBサーバに全データを移行して、また、データベースもAデータベースサーバーからBデータベースにインポートしましたら下記のエラーでました、なぜでしょうか？  
ぜひご教授くださいませ

Strict (2048): Declaration of BaseCompanyComponent::initialize() should be
compatible with Component::initialize(Controller $controller)
[APP/Controller/Component/BaseCompanyComponent.php, line 999]

Strict (2048): Declaration of CaptureUtilityComponent::initialize() should be
compatible with Component::initialize(Controller $controller)
[APP/Controller/Component/CaptureUtilityComponent.php, line 66]  
test CMS


CC BY-SA 3.0
2015-06-26T06:06:28.453
11763
2015-06-27T11:22:21.483
2015-06-27T11:22:21.483
49
9013
question
php cakephp
Cakeb DB 移行後　エラー　Strict (2048): Declaration of BaseCompanyComponent::initialize()


PHP5以降、クラスを継承してメソッドを上書きする際には親クラスと互換性のある宣言を使う必要があります。 `Declaration of A::hoge()
should be compatible with B::hoge(...)` は「A が B を継承しているが、 `hoge()`
の宣言に互換性がない」といったものです。

[PHP: クラスの抽象化 - Manual](http://php.net/manual/ja/language.oop5.abstract.php)

CakePHP 2.x の `Component::initialize()` は次のように宣言されています。

[code]

    public function initialize(Controller $controller) {
    }
    
[/code]

これを継承する `CaptureUtilityComponent::initialize()` が次のような宣言になっていませんか？

[code]

    // NG: private は親クラスに比べて可視性が低い -> public にしましょう
    private initialize(Controller $controller) {
    }
    
    // NG: 型ヒントがなくなっている -> つけましょう
    public initialize($controller) {
    }
    
    // NG: 必須引数が増えている -> デフォルト値を指定するか、別メソッドにする
    public initialize(Controller $controller, $hoge) {
    }
    
[/code]

なお今回のケースでは両方とも PHP 5.x とのことなので、元のサーバーでは php.ini の error_reporting が E_STRICT
を含んでいなかったために、エラーが表示されなかったのだと思います。

その他の設定も異なる可能性がありますから、両サーバーの php.ini を比較してみてください。


CC BY-SA 3.0
2015-06-26T06:51:08.253
11770
2015-06-26T06:51:08.253
8000
11763
answer