フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【PHPエラー】Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; foo has a deprecated constructor inの解決方法

PHPエラー
オブジェクト指向
コンストラクタ

WEBシステムを利用している環境が変わったり、サーバーの設定を変更すると、エラーや警告が表示されることがあります。
「Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; foo has a deprecated constructor in」というエラーメッセージもそのうちのひとつです。

突然エラーメッセージが表示されると、英語のメッセージに戸惑ってしまいますね。しかし、原因と解決方法が分かれば冷静に対処出来ますね。

今回の記事ではこのエラーメッセージが表示される原因と具体的な解決方法を実際のコードを交えてご紹介します。

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; foo has a deprecated constructor inとは

PHP4形式の書き方でコンストラクタが定義されている

この警告は、PHP7以降の環境でPHP4形式の書き方でコンストラクタが定義されている場合に表示されます。
例えば、以下のようにクラス名と同じ名前のメソッドを定義するのがPHP4形式の書き方です。

class ExampleClass {
    public function ExampleClass() {
        // コンストラクタの処理
    }
}

$obj = new ExampleClass();

PHP7以降の環境で上のような書き方をしていると下のようなエラーメッセージが表示されます。

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; foo has a deprecated constructor in ●●●.php on line ■■■

このエラーメッセージを確認することで●●●.phpの■■■行目、PHP4形式の書き方でコンストラクタが定義されていることが分かります。

ただし、このエラーメッセージが表示されていても、今のところは問題なく動作しています。
しかし、PHP4形式のコンストラクタはPHP7で非推奨となり、将来的に削除される予定となっていて、書き換えを促すために表示される警告のエラーメッセージです。

解決方法

PHP7以降では、__construct()メソッドを使用してコンストラクタを定義することが推奨されています。
先ほどのコードは次のように修正します。

class ExampleClass {
    public function __construct() {
        // コンストラクタの処理
    }
}

$obj = new ExampleClass();

このように修正することで、PHP7以降の環境でコンストラクタを定義してもエラーメッセージを回避出来ます。

まとめ

いかがでしたか?
PHPの古いバージョンから新しいバージョンに移行する際に、よくあるエラーの1つが、今回ご紹介したPHP4形式のコンストラクタの定義です。
新しいバージョンへの移行やサーバー環境の変更を検討している場合は、このようなエラーメッセージに注意してください。十分な検証を行ってから移行するようにしましょう。