php - 更改 fork 项目中的 PHP 命名空间?以及如何在没有 PHP 命名空间的情况下打开 pull 请求?

标签 php git namespaces pull-request git-fork

问题一:如果我在 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 命名空间? 即使我在一个专门的分支中工作以增加功能,我也会在某个时刻在我的所有分支中拥有新的命名空间。

最佳答案

  • 不,您不需要更改供应商 namespace 。他们的目的恰恰是为了避免冲突。假设您有自己的 MyRepo\Math 类,而供应商库定义了 BigInteger\Math,为什么要更改它?这不仅不是一个好的做法,而且根本就不是一种做法。
  • 如果不将 namespace 更改回原始名称,就无法做到这一点。如果您保留更改并打开 PR,它被拒绝的可能性为 99.999%

  • 更新 .根据您的评论,您对原始存储库进行了一些更改,并添加了特定于您的域的更改。如果我能够审查这些更改以提供更细粒度的建议,那将很有帮助,但一般来说,特定于您的域的更改应该进入您自己的命名空间,并且是一种辅助工具供应商库中的原始代码。基本上,您是在利用开源库来做自己的事情,对吗?

    让我编一个综合例子来说明我的意思......

    假设您的任务是通过 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/

    相关文章:

    git - 什么会影响 Git checkout 时间?

    php - 由于网站所有者进行实时更改,因此在两个目录之间执行 "git diff"

    带有 .begin() 和 .end() 的 C++ const char

    php - xdebug 断点有效但跳过不

    php - 平行于PHP的 "explode"in C : Split char* into char* using delimiter

    php - 如果已经连接到 MySQL,PHP mysql_real_escape_string() 会失败吗?

    php - 在 where 中使用 IN

    git - 如何从 bitbucket 管道中的私有(private) repo 中提取?

    namespaces - Laravel 5.2 使用自定义 Controller 特性

    c# - 命名空间和类具有相同的名称