问题1: --如果我在Github上叉出一个PHP项目:更改分叉项目的PHP类中的供应商名称是一个很好的实践吗?或者,为了避免名称空间冲突,是否有必要这样做?
命名空间更改示例:
<?php
// namespace in PHP class in original repository
namespace originalVendor\projectName
class xyz
{
}<?php
// namespace in PHP class in forked repository
namespace me\projectName
class xyz
{
}问题2: --如果我确实更改了PHP名称空间:如何在不包括对PHP命名空间的更改的情况下,将拉请求打开到原始存储库中,而不包括PHP命名空间的更改?,即使我在一个专门的分支中为添加的功能工作,在特定的时间点,我将在我的所有分支中拥有新的名称空间。
发布于 2019-12-04 10:08:38
更新.根据评论,您是说您已经对原始回购进行了一些更改,并添加了特定于您的域的更改。如果我能够回顾这些更改来给出更细粒度的建议,这会有很大帮助,但是一般来说,特定于您的域的更改应该进入您自己的名称空间,并成为供应商库中原始代码的一个侧翼。基本上,您是在利用开源库来做自己的事情,对吗?
让我用一个合成的例子来说明我的意思.
假设您的任务是通过HTTP将数据登录到您的私有日志服务器。您可以使用类似于monolog的东西进行日志记录,但显然,它缺乏将日志推入您的http://my-logging-server.dev的能力。您可以克隆monolog并将该处理程序添加到monolog的核心中,但monolog的原始维护人员绝不会接受这些更改。相反,您要做的是在您自己的命名空间中编写一个monolog插件,以便将日志推入日志服务器。在monolog中有一个扩展机制来实现这一点。基本上,您所需要做的就是实现monolog的Handler接口:
namespace MyNamespace;
class MyHTTPServerHandler extends \Monolog\Handler
{
public function handle(array $record): bool
{
$ch = curl_init('http://my-logging-server.dev');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $record,
]);
return curl_exec($ch);
}
}
$logger = new \Monolog\Logger('my-logger', new MyNamespace\MyHTTPServerHandler());在这里,您已经使用您自己的处理程序扩展了 monolog。请注意,我在大约5分钟内提出了这个例子,而且很可能MyHTTPServerHandler没有正确地实现monolog的Handler接口,所以上面的代码实际上不会工作.这只是一个综合的例子,以说明,而不是真正的使用!
如果没有可用的扩展机制,您仍然可以使用其他一些编程模式来使用自己代码中的外部库。你可以使用Facade,Adapter,Proxy,Decorator等。
例如,如果您要向monolog添加这样一个处理程序,即其他人都可以从中受益,那么您将非常欢迎对monolog核心进行公关。假设monolog缺乏使用graylog的能力,那么是的,继续做一个PR到monolog,而不更改monolog的名称空间!因为现在的更改并不是特定于您的域,而是可以有更广泛的用途,因为graylog本身对每个人都是可用的。
https://stackoverflow.com/questions/59173350
复制相似问题