在 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/