【问题标题】:function declaration conflicting with itself函数声明与自身冲突
【发布时间】:2013-05-03 17:27:48
【问题描述】:

尝试在 drupal 7 中声明一个简单函数时遇到一个奇怪的错误。我在模板文件的顶部声明了一个函数(我知道,通常是不,但我需要快速获取这些模板,现在没有时间为这些功能开发模块。)所以我在文件顶部声明以下内容:

1. function templateB_EventRegistrationNode($params = NULL) {
2. /* code */
3. }

但是,当我尝试运行模板时,出现以下错误,

致命错误:无法重新声明 templateB_EventRegistrationNode() (之前在 C:\wamp\www\vsi\sites\all\themes\vsi_new_template_b\templates\node.tpl.php:1) 在 C:\wamp\www\vsi\sites\all\themes\vsi_new_template_b\templates\node.tpl.php 在第 3 行

(已更改行号以匹配示例。)

有人知道为什么第一行与函数的最后一行冲突吗?顺便说一句,具有不同名称的函数的副本在另一个模板中工作,因此代码是有效的。

【问题讨论】:

  • 可能是因为模板文件可以包含多次,第二次包含导致错误。
  • 行号是无关紧要的(就像你的例子一样)。这是函数重新声明的问题。至少将延迟定义包装在 if (!function_exists("...")) { 中。
  • 太棒了,谢谢大家,这为我指明了正确的方向。

标签: php drupal-7 wamp


【解决方案1】:

在 Drupal 中,主题模板文件使用的任何函数都应该放在主题使用的 template.php 文件中。

@mario 说的错误是由多次包含文件引起的,但是如果您将函数放在 template.php 文件中,则该错误将不再出现,因为它只包含一次。

模板文件的内容应该只是显示输出所需的代码。

【讨论】:

  • 我认为这是一个菜鸟错误,没想到我添加了一个小函数是我的 *.tpl.php 文件。奇怪的是,它在我的本地流浪汉上没有错误,但在我的测试服务器上却失败了。绝对是你不会做错两次的事情之一。