PHP 扩展命名空间库

标签 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 类不存在。显然,它没有,而且我认为您不能像使用目录那样使用 namespace “提升”一个级别。

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

有人可以照亮我的大脑吗?

最佳答案

你已经有了自己的命名空间——你只需要一个额外的反斜杠 \以确保您指的是 OAuth2那是坐在global space . -

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

关于PHP 扩展命名空间库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24982091/

相关文章:

java - Android:不调用 Volley String 请求 onresponse

php - 安装 Magento 时出错

java - 设计运行时在两个实现类之间进行选择

ios - 如何将 CoreLocation 坐标转换为字符串?

c# - Xamarin Studio 如何编写命名空间

PHP:将 ISO8601 偏移量转换为实际时区

php - 使用 PHP 显示 MySql 结果(下拉菜单)

Java 对象字段值取决于其他字段 - 最佳实践模式?

php - 在 PHP 中自动加载静态实例化的类

c# - 为什么 Visual Studio 向我的命名空间添加一个 at 符号 (@)?