PHP扩展了命名空间库

时间:2014-07-27 14:47:15

标签: php oop namespaces

在PHP中扩展库的最佳做法是什么?

我正在使用bshaffer OAuth2库。在我的代码中,我实例化了这样的库:

//// Start up the OAuth2 server
require_once('./oauth2-server-php/src/OAuth2/Autoloader.php');
OAuth2\Autoloader::register();

所有OAuth2类都在OAuth2 \ foo \ bar之类的命名空间下。我能够扩展这些类,而不为我自己的类指定一个名称空间,方法是给它们一个唯一的名称(我不想这样做)。但是,我想创建自己的命名空间,以便在扩展它们时保持实际的类名相同。

例如,当我尝试以这种方式扩展Pdo类时,它说“Pdo类已经实例化了”#。

class Pdo extends OAuth2\Pdo {
}

所以我这样试了。在MyServer.php中,我有:

<?php
  namespace MyNS;
  class Server extends OAuth2\Server {
  }
?>

但后来我收到类MyNS \ OAuth2 \ Server不存在的错误。显然,它没有,我也不认为你可以去“上升”。与目录名称相同的级别。

我花了相当多的时间阅读PHP课程的文档。我可以通过重命名来扩展类(例如MyServer或MyPdo),但这看起来很混乱,我觉得我应该使用自己的名称空间。甚至MyNS \ OAuth2也可以工作,如果我知道如何这样做的话。也许我必须为课程创建自己的自动加载器(我不知道该怎么做)?

有人可以为我的大脑发光吗?

1 个答案:

答案 0 :(得分:2)

您几乎拥有自己的命名空间 - 您只需要一个额外的反斜杠\,以确保您指的是global space中的OAuth2。 -

<?php
    namespace MyNS;
    class Server extends \OAuth2\Server {
        //               ^______________________ here
    }