PHP在具体类中使用接口“use”

时间:2013-12-09 13:57:09

标签: php oop

遇到了一个我自己似乎无法弄清楚的问题。

使用Symfony自动加载模块。

这是我的工厂:

namespace Core\Factories;

use \Core\Gateway;

class DatabaseAccessFactory {
    // Define client type
    const DEF = 'mongo';

    public function createObject($type) {
        switch($type) {
            case self::DEF:
                return new MongoClientGateway();
                break;

            default:
                return false;
        }
    }
}

/Core/Gateway/MongoClientGateway.php的示例

<? namespace Core\Gateway;

class MongoClientGateway implements MongoDbGateway {
    public function setUp(){

    }

    public function query(){

    }

    public function save(){

    }
}

所以,基本上我使用“use”关键字将网关命名空间加载到我当前的命名空间,然后我尝试实例化一个位于\ Core \ Gateway命名空间下的类,但是它说找不到类。我错过了什么吗?

3 个答案:

答案 0 :(得分:1)

您还需要指定类

use Core\Gateway\MongoClientGateway

或使用您使用的命名空间访问该类

new Gateway\MongoClientGateway

顺便说一下,使用\ Core \ Gateway

中不需要第一个“\”

答案 1 :(得分:1)

  1. 它是use Foo\Bar,没有反斜杠。
  2. use Foo\Bar并不意味着每个Class现在都隐含地解析为Foo\Bar\Classuse Foo\Baruse Foo\Bar as Bar的简写,因此您只能使用Foo\Bar来引用名称空间Baruse不是“导入命名空间”,它是别名命名空间为更短的名称。
  3. 因此,如果您希望能够只编写Gateway\MongoClientGateway,则需要明确地写use Core\Gateway\MongoClientGatewayMongoClientGateway

答案 2 :(得分:0)

你使用“用过的”错了。 “使用”的作用是告诉你的代码来自哪个类。

示例代码:

use \my\namespace\className

new ClassName();

这将使类名称在没有名称空间的情况下可访问。