问题一:如果我在 Github 上 fork 一个 PHP 项目: 是个好习惯吗?更改供应商名称 在 fork 项目的 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 命名空间:我如何才能 打开 pull 请求 到原始存储库以获得一些附加功能 不包括更改 PHP 命名空间? 即使我在一个专门的分支中工作以增加功能,我也会在某个时刻在我的所有分支中拥有新的命名空间。
最佳答案
更新 .根据您的评论,您对原始存储库进行了一些更改,并添加了特定于您的域的更改。如果我能够审查这些更改以提供更细粒度的建议,那将很有帮助,但一般来说,特定于您的域的更改应该进入您自己的命名空间,并且是一种辅助工具供应商库中的原始代码。基本上,您是在利用开源库来做自己的事情,对吗?
让我编一个综合例子来说明我的意思......
假设您的任务是通过 HTTP 将数据记录到您的私有(private)日志服务器中。你可以使用类似
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());
好了,您只需 扩展 独白与您自己的处理程序。请注意,我已经在大约 5 分钟内完成了这个示例,而且很可能是
MyHTTPServerHandler
没有实现 monolog 的 Handler
接口(interface)正确,所以上面的代码实际上不起作用......这只是一个合成示例,用于说明,不用于实际使用!如果没有可用的扩展机制,您仍然可以使用其他一些编程模式在您自己的代码中使用外部库。您可以使用
Facade
, Adapter
, Proxy
, Decorator
, 等等。例如,如果您将这样一个处理程序添加到 monolog 中,其他人都可以从中受益,那么您将非常欢迎您对 monolog 核心进行 PR。比方说
monolog
缺乏使用能力 graylog
,那么是的,在不改变 monolog 的命名空间的情况下,继续对 monolog 进行 PR!因为现在更改不是特定于您的域,而是可以有更广泛的用途,如 graylog
本身可供所有人使用。
关于php - 更改 fork 项目中的 PHP 命名空间?以及如何在没有 PHP 命名空间的情况下打开 pull 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59173350/