PHP 8で「Uncaught Error: Non-static method A::f() cannot be called statically」になる場合

カテゴリ:PHP

PHP 8 の仕様変更に起因するエラーの可能性があります。

原因

PHP 7 までは、以下のようなスタティックではないメソッドをスタティックな呼び方をしても問題なく動作していました。

class A {
    function f() {
        echo "テスト\n";
    }
}

A::f();

PHP 7.x の場合:

$ /usr/bin/php7.4 staticmethod.php 
テスト

しかし、PHP 8 ではこのような呼び方は厳格に禁止され Fatal error となってしまいます。つまりPHPの実行が中断されます。

PHP 8.x の場合:

$ /usr/bin/php8.2 staticmethod.php 
PHP Fatal error:  Uncaught Error: Non-static method A::f() cannot be called statically in /mnt/c/VSC/php/staticmethod.php:8
Stack trace:
#0 {main}
  thrown in /mnt/c/VSC/php/staticmethod.php on line 8

修正方法

以下のようにオブジェクト指向的な呼び方に修正するか、メソッドをスタティックにすることで解決できます。

方法1:オブジェクト指向的な呼び方にする

class A {
    function f() {
        echo "テスト\n";
    }
}

$a = new A();
$a->f();

方法2:メソッドをスタティックにする

class A {
    static function f() {
        echo "テスト\n";
    }
}

A::f();

公開日時:2023年05月01日 15:21:29
最終更新日時:2023年05月02日 19:29:56

なお、レンタルサーバー選びで迷ったらこちらの記事で主要レンタルサーバーのプランと料金を比較していますので、是非参考にしてみてください。

PHPに戻る

このページのトップに戻る