在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也可以工作,如果我知道如何这样做的话。也许我必须为课程创建自己的自动加载器(我不知道该怎么做)?
有人可以为我的大脑发光吗?
答案 0 :(得分:2)
您几乎拥有自己的命名空间 - 您只需要一个额外的反斜杠\
,以确保您指的是global space中的OAuth2
。 - 即
<?php
namespace MyNS;
class Server extends \OAuth2\Server {
// ^______________________ here
}