PHP可以使用名称空间(或其他任何内容)来包含两个相同名称的类

时间:2014-06-23 18:41:48

标签: php namespaces

我有一个名为' Users'在/v1/users.php和另一个名为' users'在/v2/users.php中(v1是我们数据库的遗留API)。我尝试使用这两种API编写迁移代码。

有没有办法可以在迁移类中使用这两个类?遗憾的是,我无法在users.php文件本身中声明命名空间,但我想知道是否有某种方法可以将include本身封装在命名空间中?例如,在migrations.php中:

<?php
namespace v1 {
require_once("v1/users.php");
}
namespace v2 {
require_once("v2/users.php");
}

class migration
{
    public function migrateUser($v1UserId)
    {
        $v1Users = new v1\Users;
        $v2Users = new v2\users;
        $v2Users->addUser($v1Users->getUser($v1UserId));
    }
}

?>

1 个答案:

答案 0 :(得分:1)

除了Rocket Hazmat的评论之外,我还非常确定你需要一个全局/空白的命名空间来代替其他代码。在文件中使用括号namespace { }语法后,所有代码都必须位于命名空间中:

namespace {
    class migration
    {
        public function migrateUser($v1UserId)
        {
            $v1Users = new \v1\Users;
            $v2Users = new \v2\users;
            $v2Users->addUser($v1Users->getUser($v1UserId));
        }
    }
}