59

我最近对 ​​PHP 5.4 进行了更新,我收到关于静态和非静态代码的错误。

这是错误:

PHP Strict Standards:  Non-static method VTimer::get() 
should not be called statically in /home/jaco/public_html/include/function_smarty.php on line 371

这是第 371 行:

$timer  = VTimer::get($options['magic']);

我希望有人能帮忙。

4

4 回答 4

112

这意味着它应该被称为:

$timer = (new VTimer)->get($options['magic']);

static和之间的区别在于non-static第一个不需要实例化,因此您可以调用classnamethen append::并立即调用该方法。像这样:

ClassName::method();

如果该方法不是静态的,则需要像这样初始化它:

$var = new ClassName();
$var->method();

但是,在 PHP 5.4 中,您可以使用以下语法作为简写:

(new ClassName)->method();
于 2013-10-30T21:23:17.180 回答
18

您还可以将方法更改为静态,如下所示:

class Handler {
    public static function helloWorld() {
        echo "Hello world!";
    }
}
于 2016-06-21T04:42:05.207 回答
6

最优雅的方式是:

(new ClassName)->method();

您也可以将您的函数转换为static function call() {},但这取决于您的函数以及您正在使用它做什么。

如果您需要实例化一个类,请避免这样做,将静态函数视为常量,它们不能有对象并且需要预定义的变量。

于 2020-05-01T11:53:49.537 回答
-5

我以这种方式解决了这个问题。

error_reporting('E_NONE');// add this in the pdf dwonload function
$this->load->library('mpdf/mpdf');

这应该会有所帮助。

于 2020-12-09T05:22:22.520 回答