2012-11-09 85 views
0

好,我是新來的命名空間,這裏的情景......我有2個文件在PHP命名空間的聲明(5.3.5)

庫/ class.mysql.inc.php

class MySQL{ 

} 

類/ class.mysql.inc.php

require_once('libs/class.mysql.inc.php'); 
interface MySQLTemplate{ 
} 
class MySQLWrapper extends MySQL implements MySQLTemplate{ 
} 

好了,所以這裏是我的問題。我將如何將MySQLWrapper重命名爲MySQL?很明顯'MySQL擴展MySQL'不會發生。我似乎無法在要求文件之前聲明一個名稱空間。 (嗯,我可以,但它不接受名稱空間)。我不想觸摸libs/class.mysql.inc.php文件(如果是poss)。

任何提示?提示?可能性在這裏?

回答

0

好的,看起來你只能在文件中定義命名空間,任何包含都會被忽略。我通過在文件頂部聲明一個隨機命名空間來解決它(PHP喜歡這個在其他任何地方之前)。然後因爲包含文件,inlcude類的命名空間是全局的。所以,我得到了它的工作:

庫/ class.mysql.inc.php

class MySQL{ 

} 

類/ class.mysql.inc.php

namespace Libs; 
require_once('libs/class.mysql.inc.php'); 
namespace App; 
interface MySQLTemplate{ 
} 
class MySQL extends \MySQL implements MySQLTemplate{ 
} 

希望這有助於別人..因爲我不明白它的行爲,所以我一直在撓頭。

+0

這仍然insn't正確...任何未來的MySQL類的引用是從父類。衛生署! – Jenski

1

無論你需要參考MySQLWrapper,需要這樣的類use關鍵字:

use MySQLWrapper as MySQL; 

//do your stuff with MySQL as an alias 
+0

我喜歡,因爲我不需要使用命名空間,但我仍然需要更改每個文件聲明的地方......我想我必須在添加'App \'之間做出選擇:$ db = new App \ MySQL();或'使用MySQLWrapper作爲MySQL';' $ db = new MySQL(); – Jenski