【问题标题】:Declaration of namespaces in PHP (5.3.5)PHP 中的命名空间声明 (5.3.5)
【发布时间】:2012-10-29 16:52:01
【问题描述】:

好的,我是命名空间的新手,这是场景...我有 2 个文件

库/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?显然'class MySQL extends MySQL'不可能发生。在需要文件之前,我似乎也无法声明命名空间。 (好吧,我可以,但它不接受命名空间)。我也不想碰 libs/class.mysql.inc.php 文件(如果有的话)。

有什么提示吗?提示?这里有可能吗?

【问题讨论】:

    标签: php namespaces include


    【解决方案1】:

    凡是需要引用MySQLWrapper的地方,都需要带有use关键字的类:

    use MySQLWrapper as MySQL;
    
    //do your stuff with MySQL as an alias
    

    【讨论】:

    • 我喜欢,因为我不必为命名空间而烦恼,但我仍然需要更改声明它的每个文件......我想我必须在添加 ' 之间做出选择应用程序\' 在:$db = 新应用程序\MySQL();或'使用 MySQLWrapper 作为 MySQL;'以上 $db = new MySQL();
    【解决方案2】:

    好的,看来您只能在文件中定义命名空间,任何包含都将被忽略。我通过在文件顶部声明一个随机命名空间来解决它(PHP 喜欢将它放在其他任何东西之前)。然后因为包含文件,所以 inlcude 类的命名空间是全局的。所以我得到了它的工作:

    libs/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{
    }
    

    希望这对其他人有所帮助...我有一段时间摸不着头脑,因为我不了解它的行为。

    【讨论】:

    • 这仍然不太正确...... MySQL 类的任何未来引用都来自父类。哇!
    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2019-03-25
    • 2020-01-14
    相关资源
    最近更新 更多