我試圖通過基於class_exists返回來保護類被重新聲明。在Wordpress中創建插件時這很常見,因爲可能有多個使用相同類的插件。使用下面的簡單的例子:PHP:返回後無法重新聲明類錯誤
您可以在http://www.youtube.com/watch?v=llVTvh6ffmw
以下鏈接說明了問題,根源在Youtube上觀看這一http://www.youtube.com/watch?v=VcNLoDvRLDc
的index.php
<?php
include_once('debug1.php');
include_once('debug2.php');
$test = new SomeClass();
echo $test->someVar;
debug1.php & debug2.php是重複的文件...
<?php
if(class_exists('SomeClass')) return;
class SomeClass {
var $someVar = "test";
}
儘管有一個return語句,我們仍然獲得了致命錯誤「不能重新聲明類」。
附註:通過在debug2中簡單地添加/刪除空白,這段代碼工作的時間有80% - 我的意思是它運行一次然後中斷。
我正在運行PHP版本5.4.4。
所以我的問題是。這是預期的行爲?如果是,我錯過了什麼。如果不是,那麼令人擔憂,因爲我在幾個WordPress插件中看到了這一點。
請注意:我能得到它的工作與其他包裝每一次,但這是更多的代碼...:
<?php
if(class_exists('SomeClass')) return;
else {
class SomeClass {
var $someVar = "test";
}
}
這個問題最好用自動加載來解決,所以除非你事先給出具體的限制(並解釋爲什麼它們不能被解除),否則建議替代方法沒有任何意義。 – Jon
感謝Jon - 您的正確自動加載可以繞過這個問題,但對這種預期行爲更感興趣,尤其是當其他衆所周知的插件使用它時。 [Wordpres Github插件更新程序](https://github.com/jkudish/WordPress-GitHub-Plugin-Updater/blob/master/updater.php) – afxdesign
這是預期的行爲,是的。再說一次,除非你在特定的限制條件下操作,否則做這種事情是沒有意義的。 – Jon