首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在分叉项目中更改PHP名称空间?以及如何在没有PHP名称空间的情况下打开拉请求?

在分叉项目中更改PHP名称空间?以及如何在没有PHP名称空间的情况下打开拉请求?
EN

Stack Overflow用户
提问于 2019-12-04 10:01:41
回答 1查看 278关注 0票数 0

问题1: --如果我在Github上叉出一个PHP项目:更改分叉项目的PHP类中的供应商名称是一个很好的实践吗?或者,为了避免名称空间冲突,是否有必要这样做?

命名空间更改示例:

代码语言:javascript
复制
<?php
// namespace in PHP class in original repository
namespace originalVendor\projectName

class xyz
{
}
代码语言:javascript
复制
<?php
// namespace in PHP class in forked repository
namespace me\projectName

class xyz
{
}

问题2: --如果我确实更改了PHP名称空间:如何在不包括对PHP命名空间的更改的情况下,将拉请求打开到原始存储库中,而不包括PHP命名空间的更改?,即使我在一个专门的分支中为添加的功能工作,在特定的时间点,我将在我的所有分支中拥有新的名称空间。

EN

回答 1

Stack Overflow用户

发布于 2019-12-04 10:08:38

  1. 不,您不需要更改供应商名称空间。他们的目的正是为了避免冲突。比如说,您有自己的MyRepo\Math类,供应商库定义了BigInteger\Math,为什么要更改它?这不仅不是一个好的实践,而且根本不是一种实践。
  2. 没有办法做到这一点,除非将名称空间更改为原始名称空间。如果你保留你的零钱,打开一个公关,它将被拒绝的机会是99.999%的

更新.根据评论,您是说您已经对原始回购进行了一些更改,并添加了特定于您的域的更改。如果我能够回顾这些更改来给出更细粒度的建议,这会有很大帮助,但是一般来说,特定于您的域的更改应该进入您自己的名称空间,并成为供应商库中原始代码的一个侧翼。基本上,您是在利用开源库来做自己的事情,对吗?

让我用一个合成的例子来说明我的意思.

假设您的任务是通过HTTP将数据登录到您的私有日志服务器。您可以使用类似于monolog的东西进行日志记录,但显然,它缺乏将日志推入您的http://my-logging-server.dev的能力。您可以克隆monolog并将该处理程序添加到monolog的核心中,但monolog的原始维护人员绝不会接受这些更改。相反,您要做的是在您自己的命名空间中编写一个monolog插件,以便将日志推入日志服务器。在monolog中有一个扩展机制来实现这一点。基本上,您所需要做的就是实现monolog的Handler接口:

代码语言:javascript
复制
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接口,所以上面的代码实际上不会工作.这只是一个综合的例子,以说明,而不是真正的使用!

如果没有可用的扩展机制,您仍然可以使用其他一些编程模式来使用自己代码中的外部库。你可以使用FacadeAdapterProxyDecorator等。

例如,如果您要向monolog添加这样一个处理程序,即其他人都可以从中受益,那么您将非常欢迎对monolog核心进行公关。假设monolog缺乏使用graylog的能力,那么是的,继续做一个PR到monolog,而不更改monolog的名称空间!因为现在的更改并不是特定于您的域,而是可以有更广泛的用途,因为graylog本身对每个人都是可用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59173350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档