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