2011-05-01 106 views
2

我開始使用PHP __autoload函數,現在我得到那些奇怪的致命錯誤:無法重新聲明類xxx錯誤。PHP __autoload無法重新聲明

這很奇怪,因爲這些錯誤發生在我甚至沒有加載自動加載函數的類上。我也使用require_once來包含這些文件。

我對此很困惑。在使用自動加載時,任何人都知道這類錯誤?

+3

你可以張貼一些示例代碼? – 2011-05-01 23:53:57

+0

我收到一個錯誤「致命錯誤:無法在/ var/www/vhosts中重新聲明randomstring()(先前在/var/www/vhosts/businessgame.be/httpdocs/new/functions/function.random.php:24中聲明) /businessgame.be/httpdocs/new/functions/function.random.php on line 34「 奇怪的是,當我手動包含一個文件Bank.php時,這個錯誤不會發生,但是這個文件不包含函數或者甚至沒有使用它:P。 舉起你的手,如果你是無知的^^ – KingIsulgard 2011-05-03 13:06:17

回答

0

我發現了這個問題。顯然,當它想要包括Bank類時,它從當前目錄^^中取出了「bank.php」文件。這只是銀行頁面,它應該包含「src/model/Bank.php」。我從搜索列表中刪除了當前目錄,並且它已被修復。

因此,請務必確保自動加載功能包含正確的文件。好的做法是將你的文件更直接地命名爲class.Bank.php或class.User.php,而不是Bank.php或User.php。

感謝您的幫助和快速反應!

+0

所以它不是required_once那個問題,但它只是包括錯誤的文件^^ – KingIsulgard 2011-05-14 17:53:25

+0

Yay爲了弄清楚它,我不認爲改變你的整個文件命名約定爲一個相當明顯的錯誤是有道理的。 – Anther 2013-04-11 18:55:25

0

我以前有過這個,不知道是什麼原因造成的。確保你使用的是require_once/include_once而不是正常版本的初學者。我認爲這個問題涉及到使用class_exists而不告訴它跳過自動加載(class_exists($name, false)) - 你在做這個嗎?

+0

但自動加載只有當一個類不存在?我跟蹤了自動加載類包含的文件,並且我沒有看到任何雙打。這是一個奇怪的錯誤。 – KingIsulgard 2011-05-03 11:59:57

6

require_once/include_once只在文件名稱試圖包含文件而不是類名時查看文件名。所以你可以在Foo.php和B.php都有Foo類,然後你會得到這個錯誤。

我不知道怎麼會__autoload使你的任何問題,除非__autoload需要Foo.php因爲它需要Foo類,你需要手動B.php它重新定義Foo類。

順便說一下,使用spl_autoload_register而不是__autoload

+0

文件名稱正確。只是它宣稱它已經在實際上沒有加載過類。當我跟蹤正在加載的課程時,我注意到沒有雙打。 – KingIsulgard 2011-05-03 12:02:28

+0

感謝您對spl_autoload_register的建議!幫我出去了。 – jsims281 2011-12-13 12:31:29

3

我有同樣的情況。所有我改變了其工作對我來說

include('xxx.php'); 

require_once('xxx.php'); 
0

我不是最好的答案假裝。只是我的想法。

__autoload()在PHP 7.2中已棄用,可能會被刪除。

我發現這種方式上傳/ include文件

//initialize a function which will upload files 
function upload(){//you can call the function as you like 
    //your path to files goes here 
} 

spl_autoload_register('upload')//specify the function, where you include your files(in this case it's upload function