当前位置: 首页 > 知识库问答 >
问题:

非静态方法.....不应静态调用

杨海
2023-03-14

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

我希望有人能帮忙。

共有3个答案

胥良平
2023-03-14

最优雅的方式应该是:

(new ClassName)->method();

您也可以将函数转换为静态函数调用() {},但这取决于您的函数以及您使用它做什么。

如果你需要实例化一个类,那么避免这样做,像对待常量一样对待静态函数,它们不能有对象,需要预定义的变量。

萧宣
2023-03-14

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

class Handler {
    public static function helloWorld() {
        echo "Hello world!";
    }
}
史俊德
2023-03-14

这意味着它应该被称为:

$timer = (新 VTimer)-

< code>static和< code>non-static之间的区别在于,第一个不需要实例化,因此您可以调用< code>classname,然后将< code>::追加到它,并立即调用该方法。像这样:

ClassName::method();

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

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

但是,在 PHP 中

(new ClassName)->method();
 类似资料:
  • 我正在使用存储库模式并尝试建立模型之间的关系。当我尝试运行存储()方法(在控制器中),该方法试图使用用户()方法(与方模型建立关系)时,我收到以下错误消息: 非静态方法不应该静态调用::user(),假设$this来自不兼容的上下文 我不明白为什么在尝试运行user()relationship方法时会出现此错误,但所有其他方法(包括$this- 以下是相关代码:

  • 我一直试图用我的验证代码进行php pear验证,但我收到的都是严格标准错误--问题是什么?我如何修复它? 电子邮件验证.php

  • PHP严格标准:不应在第33行的/web/sites/blah/somescript.PHP中静态调用非静态方法pear::iserror() 我在MDB2上看到了类似的错误。稍后再详细介绍。 somescript.php: 问题 是否有不同的方法来调用而不会产生错误?

  • 我正在尝试在varGrant CentOS VM上本地运行一个codegniter站点。我已经下载了所有文件,并设置了yaml/host文件等。 我在屏幕上看到这个错误。 遇到 PHP 错误 严重性:8192 消息:非静态方法 MY_Loader::d efine_module() 不应静态调用,假设$this来自不兼容的上下文 文件名:controllers/Front _ controller

  • 我正在努力得到一个用户的基础上,他的id或电子邮件后,他登录通过一个表单。这个函数是在user.class.php中定义的,我想在另一个名为profile.php的php文件中调用它,但它仍然给我带来语法错误,我不知道如何修复它。 错误:不推荐使用:不应静态调用非静态方法User::GetUserId()注意:未定义变量:email in 使用getters和setters,函数 下面是profi

  • 我在magento日志中得到这个错误: 严格注意:非静态方法 Mage_Catalog_Block_Product:getPriceHtml() 不应静态调用,假设$this来自第 23 行 /home/edistico/domains/fujitsu-skener.si/public_html/app/design/frontend/base/default/template/callforpr