【问题标题】:Strict Standards: Non-static method STemplate::assign() should not be called statically严格标准:不应静态调用非静态方法 STemplate::assign()
【发布时间】:2012-07-30 12:06:58
【问题描述】:

我将我的旧 xampp (1.7.3) localhost 服务器升级到 1.8.0 。现在,在我的所有页面中无法使用 smarty 模板引擎(2.6.6),我看到 Strict Standards 错误。什么问题?如何解决这个问题?

NOTE : This Wroked Fine In Old Xampp(1.7.3).

错误部分:

Strict Standards: Non-static method STemplate::assign() should not be called statically in C:\xampp\htdocs\tube\include\config.php on line 88

Strict Standards: Non-static method STemplate::create() should not be called statically in C:\xampp\htdocs\tube\libraries\mysmarty.class.php on line 42

Strict Standards: Non-static method STemplate::setCompileDir() should not be called statically in C:\xampp\htdocs\tube\include\config.php on line 181

Strict Standards: Non-static method STemplate::setTplDir() should not be called statically in C:\xampp\htdocs\tube\include\config.php on line 182

我的配置行错误:

STemplate::assign($field, $config[$field]); // line 88
STemplate::setCompileDir($config['basedir']."/temporary"); // line 181
STemplate::setTplDir($config['basedir']."/themes"); // line 182

my.Smarty.class.php(错误行 2)

function assign($var, $value) {
        global $Smarty;
        if (!isset($Smarty)) {
            STemplate::create(); // <---- line 42
        }
        $Smarty->assign($var, $value);
    }

感谢您的帮助:)

【问题讨论】:

  • function assign 不是静态方法,但您调用它是因为它是静态方法。通常你用 $instance->assign() 调用一个方法。所以这是你的问题。所以你应该升级所有软件,然后看看你是否需要进一步修改你的代码。

标签: php xampp smarty


【解决方案1】:

这是因为您使用的是带有strict standards 的现代PHP 版本。您可以通过声明使代码工作:

public static function assign($var, $value)

但是,从其他错误来看,您会遇到很多问题。您可以尝试禁用严格的标准,但最好升级到Smarty 的现代版本。

【讨论】:

  • 你说得对!但我没有时间将 Smarty 更改/升级到新版本!所以我将功能更改为公共静态。功能strict standards 错误已修复,但我看到新错误:Notice: Undefined variable: ending in C:\xampp\htdocs\tube\members.php on line 214。第 214 行是:STemplate::assign('beginning',$beginning);
  • 这可能是之前或之后的行,它可能需要isset 检查或在使用前进行初始化。
  • 会员页面所有模板代码://TEMPLATES BEGINSTemplate::assign('beginning',$beginning); line 213STemplate::assign('ending',$ending); line 214STemplate::assign('pagelinks',$pagelinks); line 215STemplate::assign('total',$total); line 216STemplate::assign('listvideos',$users); line 217STemplate::display('header.tpl'); line 218STemplate::display('header.tpl'); line 218STemplate::display('members.tpl'); line 219STemplate::display('members.tpl'); line 219@987654337s@pan@9876
  • 好吧,所以 $ending 没有定义,这可能是你的代码中的一个错误......至少你可以尝试:STemplate::assign('ending', isset($ending) ? $ending : '');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2013-03-31
  • 2015-05-08
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多