2012-11-09 88 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