问题描述
我的一个项目利用 PEAR 包 HTML_Template_IT 及其扩展 HTML_Template_ITX。该代码一直工作到从 PHP 5 到 PHP 7.4 的姗姗来迟的转变。现在我们遇到了从扩展类引用 HTML_Template_ITX() 的问题。 简而言之,实现如下所示:
<?PHP
//=== somesite.PHP ===//
[...]
$template = new siteMainTemplate("article.tpl");
$template->setCurrentBlock("ARTICLE");
$template->setvariable("ARTICLE_HEAD","some headline");
$template->setvariable("ARTICLE_BODY","some text");
[...]
$template->parseCurrentBlock();
$template->showSite();
[...]
?>
扩展 PEAR 包的类定义:
<?PHP
//=== classdefs.PHP ===//
require_once "../PEAR/ITX.PHP";
class siteMainTemplate extends HTML_Template_ITX {
function __construct($pageBody,$pageTitle) {
$this->template = $this->HTML_Template_ITX("../templates/");
[...]
} // ... end of function
function showSite() {
$this->show();
} // ... end of function
} // ... end of class deFinition
?>
这会导致错误“调用未定义的方法 siteMainTemplate::HTML_Template_ITX()”。
抛出错误的行是
$this->template = $this->HTML_Template_ITX("../templates/");
一开始看起来很奇怪,但已经工作了很长时间。将其更改为类似
$this->template = new HTML_Template_ITX("../templates/");
Warning: preg_match_all(): Empty regular expression in /.../PEAR/IT.PHP on line 1020
Warning: preg_match(): Empty regular expression in /.../PEAR/ITX.PHP on line 296
Notice: Undefined property: siteMainTemplate::$parseCurrentBlock in /.../classes/classdefs.PHP on line ...
有人可以建议我在这里做错什么吗?
编辑:在第二个代码片段中更正了错字 - 第二个函数意在将示例作为“showSite()”完成,而不是作为第二个构造函数。
解决方法
更多的测试显示正确的行确实是:
$this->template = new HTML_Template_ITX("../templates/");
在那之后,问题中发布的警告只是掩盖了根植于处理移交的“模板目录”的进一步不一致。