2017-01-04 70 views
1

'無法重新聲明function`我有一個輔助功能helper.php與內容:包含在使用兩個文件(information.phpcommercial.php致命PHP的錯誤:在使用include_once

<?php 
session_start(); 

function get_result($dbh, $sql) { 
    //return mssql_query($sql); 
    return $dbh->query($sql); 
} 
?> 

include_once 'helper.php' 

不幸的是,這會產生稍微混淆的錯誤信息:

PHP Fatal error: Cannot redeclare get_result() (previously declared in helper.php:4) in helper.php on line 4 

我知道我不能重新聲明函數,因此爲什麼我使用include_once構造函數,但它試圖重新聲明函數。爲什麼?

如果有幫助;我正在使用Mustache PHP,並且所有三個文件都位於partials文件夾中。

+0

'helper.php'的內容是什麼?你展示了'help.php'的內容。另外,你確定每一個'helper.php'的包含都是通過'include_once'完成的嗎? –

+0

@DaanMeijer - 對不起,這是一個錯字,它應該是'helper.php'。固定! – nluigi

+0

好:)現在,我的另一個問題:你確定每個包含是通過'include_once'嗎? –

回答

2

include_once確保該文件只包含一次。它不檢查文件內容或其中的功能。所以當添加兩個具有相同函數名的文件時,它對於出現的錯誤是非常自然的!

從手冊:

include_once may be used in cases where the same file might be included and evaluated more than once during a particular execution of a script, so in this case it may help avoid problems such as function redefinitions, variable value reassignments, etc.

斜體意味着在同一文件中的函數,而不是在不同的文件。

+0

接受這個答案,因爲它回答我的實際問題(爲什麼發生這種情況?)最好的 – nluigi

1

解決此錯誤的一種方法是將您的幫助函數包裹在一張支票中。

你可以嘗試這樣的:

if (! function_exists('get_result')) { 

    function get_result() 
    { 
     //your code 
    } 
} 

希望這有助於!

+0

我用這是爲了避免重新宣佈,但它似乎是對我的一個快速解決方案......我現在很滿意它,因爲它有助於解決問題,我正處於一個最後期限之內,但我將在未來再次訪問並看到如果我可以做到這一點,而不訴諸'修復' – nluigi