トップページ > プログラム > PHP > PHP で「Non-static method *** should not be called statically」が出る場合の対応方法

PHP で「Non-static method *** should not be called statically」が出る場合の対応方法

PHP を利用しているとエラーログ等に「Non-static method *** should not be called statically」が表示されることがあり、このエラーが出る原因と対応方法について紹介する。

PHP で「Non-static method *** should not be called statically」が出る場合の対応方法

1. 「Non-static method ~」の全文と翻訳

PHP のプログラムを動作させてエラーログ等に「Non-static method ~」が出る時の全文が下記となる。

[24-Dec-2019 19:44:17 Asia/Tokyo] PHP Deprecated:  Non-static method {クラス名}::{関数名}() should not be called statically in ○○.php on line {行数}

このエラーを翻訳すると次のようになり、呼び出した関数が静的でないことを示している。

PHP 非推奨:非静的メソッド {クラス名}::{関数名}() {行数}行目の○○.php で静的に呼び出さないでください

2. 「Non-static method ~」が出る原因

「Non-static method ~」が出る原因としては、利用しようとしている関数が静的な呼び出しに対応していないためである。

例えば次のような testClass の中に testFunction() という関数があったとする。

class testClass {
    public static function testFunction() {
        (処理)
    }
}

上記の関数を呼び出して利用したい場合は、次のように {クラス名}::{関数名}() のように「::」を利用する。

testClass::testFunction();

この「::」を利用する呼び出し方法は、関数が static(静的)の宣言が成されているときに利用できるもので、関数に static が無い場合は「Non-static method ~」のログが表示される。

3. 「Non-static method ~」が出た時の対応方法

「Non-static method ~」エラーログ等に出た時の対応方法としては、まず呼び出そうとしている関数に static が付いているかどうかを確認する。

もし static が無ければ静的な呼び出しができないため static を次のように付けるとエラーが出ずに正常に呼び出すことができる。

<?php
class testClass {
    public static function testFunction() {
        (処理)
    }
}

testClass::testFunction();

また、static が宣言されていない関数を呼び出す際には一度 new でインスタンスとして生成してから「->」を利用して呼び出す。

<?php
class testClass {
    public function testFunction() {
        (処理)
    }
}

$obj = new testClass();
$obj->testFunction();

関連記事

@webolve をフォローしてください