致命的php错误:使用include_once时``无法重新声明函数`

时间:2017-01-04 10:40:04

标签: php php-include mustache.php

我有一个帮助函数library(dplyr) dt[dt$period >= "Mar 2014"] <- dt %>% filter(period >= "Mar 2014") %>% group_by(grp) %>% mutate(x = x[period == "Mar 2014"], y = y[period == "Mar 2014"]) dt # grp period x y #1: 1 Jan 2014 1 11 #2: 1 Feb 2014 2 12 #3: 1 Mar 2014 3 13 #4: 1 Apr 2014 3 13 #5: 1 May 2014 3 13 #6: 2 Jan 2014 6 16 #7: 2 Feb 2014 7 17 #8: 2 Mar 2014 8 18 #9: 2 Apr 2014 8 18 #10: 2 May 2014 8 18 #11: 3 Jan 2014 11 21 #12: 3 Feb 2014 12 22 #13: 3 Mar 2014 13 23 #14: 3 Apr 2014 13 23 #15: 3 May 2014 13 23 ,内容为:

helper.php

包含在两个文件(<?php session_start(); function get_result($dbh, $sql) { //return mssql_query($sql); return $dbh->query($sql); } ?> information.php)中,使用:

commercial.php

不幸的是,这会产生稍微混乱的错误消息:

include_once 'helper.php'

我明白我不能重新声明函数,因此我使用PHP Fatal error: Cannot redeclare get_result() (previously declared in helper.php:4) in helper.php on line 4 构造的原因,但无论如何它试图重新声明函数。为什么呢?

如果有帮助;我使用的是Mustache PHP,并且所有三个文件都位于include_once文件夹中。

2 个答案:

答案 0 :(得分:2)

include_once确保文件只包含一次。它不检查文件的内容或其中的功能。因此,当添加两个具有相同功能名称的文件时,错误就很自然了!

来自手册:

  在可能存在相同文件的情况下,可能会使用

include_once   在特定执行期间不止一次地包含和评估   一个脚本,所以在这种情况下,它可以帮助避免诸如函数之类的问题   重新定义,变量值重新分配等

斜体表示该函数在同一个文件中,而不是在不同的文件中。

答案 1 :(得分:1)

解决此错误的一种方法是将辅助函数包装在一个检查中。

您可以尝试以下方式:

if (! function_exists('get_result')) {

    function get_result()
    {
        //your code
    }
}

希望这有帮助!