【问题标题】:Non-static method ..... should not be called statically非静态方法.....不应该静态调用
【发布时间】:2013-11-10 17:12:12
【问题描述】:

我最近对 ​​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']);

希望有人能帮忙。

【问题讨论】:

  • 欢迎堆栈溢出。您应该选择一个用户名。我建议Novice Hobby PHP Boy
  • 谢谢你,这对我来说是个好名字,Sergiu ;)

标签: php static non-static


【解决方案1】:

我已经用这种方法解决了这个问题。

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

这应该会有所帮助。

【讨论】:

  • 切割错误报告不是解决方案,它只是隐藏问题......
【解决方案2】:

最优雅的方式是:

(new ClassName)->method();

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

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

【讨论】:

    【解决方案3】:

    这意味着它应该被称为:

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

    staticnon-static 之间的区别在于第一个不需要初始化,因此您可以调用classname 然后将:: 附加到它并立即调用该方法。 像这样:

    ClassName::method();
    

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

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

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

    (new ClassName)->method();
    

    【讨论】:

    • 或者他应该将方法更改为静态(因为这是一个现有的代码库,现在正在升级的 PHP 环境中运行)。
    • @mamdouh 你很棒,错误消失了。谢谢您的帮助。祝你有个愉快的夜晚。真诚的,雅科
    • @user2938848 - 欢迎您。我希望您将答案标记为已接受,因为它适用于您:)
    • 通过更快的调用:(new ClassName)->method();你的意思是速记。对吗?
    • 我确定语法是意图。
    【解决方案4】:

    您也可以像这样将方法更改为静态:

    class Handler {
        public static function helloWorld() {
            echo "Hello world!";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-08
      • 2018-10-10
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 2015-01-13
      相关资源
      最近更新 更多