插件和主题之间的依赖冲突

2024-04-11

我在我的网站上安装了自定义主题和 SMTP 插件,它们都包含用于不同目的的 Google API PHP 客户端。不幸的是,插件和主题使用的依赖是不同版本的,并且它们无法轻松升级或降级。

这会导致冲突,插件从主题加载包而不是自己的包,并抛出错误。

这是主题的作曲家。

{
    "require": {
        "google/apiclient": "^2.2.1"
    },
    "scripts": {
        "pre-autoload-dump": "Google\\Task\\Composer::cleanup"
    },
    "autoload": {
        "psr-4": {
            "BH\\": "includes/"
        }
    },
    "extra": {
        "google/apiclient-services": [
            "Sheets"
        ]
    }
}

并且主题使用了命名空间BH

有没有办法限制使用 Composer 仅为主题执行的代码加载 Google API PHP 客户端文件(带有命名空间BH)而不是使用不同名称空间的插件(例如ABC).

请注意:我尝试过范围界定,但这使整个情况变得更加复杂。


有没有办法限制使用 Composer 仅为主题执行的代码加载 Google API PHP 客户端文件(带有命名空间BH)而不是使用不同名称空间的插件(例如ABC).

简而言之,不,Composer 中不存在这样的选项。 Composer 根据项目配置转储自动加载器(composer.json以及以下所有内容vendor/*/composer.json).

剩下的就是 PHP 中自动加载的工作原理:您使用一个类(或 Interface/Trait/Enum 等),如果尚未加载,则会咨询自动加载器以将类名解析为类定义(通常是磁盘上的文件)。然后该文件由 PHP 加载并解析(require etc.).

所以这里没有太多魔法。您还可以看到,这取决于命名空间“加载”内容的执行顺序。顺便说一句,(默认)自动加载器。看不到(没有进一步的内省,由于效率原因没有进行)哪个命名空间实际上需要什么。

如果您想检查细节 - 特别是当您已经研究过范围界定时 - Composer 可以在运行时级别提供一些东西。

默认情况下,作曲家自动加载器是prefixed。这意味着它将自己添加到自动加载器队列的顶部。在 PHP 中,您可以有多个自动加载器实现。您可以在项目中配置 Composer,使其不将自身添加到队列顶部,而是添加到队列末尾。

这允许您在前面添加自己的自动加载器,例如,您可以使用它来诊断加载。它还允许您加载不同的内容,但只能加载具有相同类名的内容。

这就是为什么分叉和重写命名空间(又名“作用域”)通常效果更好,因为类名不同,然后冲突就消失了。

我尝试过界定范围,但这使整个情况变得更加复杂。

是的,确实如此,但请记住,归根结底这是依赖冲突。不从根本上解决问题只会迫使你继续采取变通办法。此类冲突在解决之前不会轻易消失。

是的,依赖管理很困难。我们已经说过编程很困难,但是当您遇到第一个依赖冲突时,还有另一个教训需要通过艰难的方式学习。这些不会神奇地消失,并且需要维护(我并不是指那些可以通过提升需求或类似方式轻松解决的依赖项冲突,而是指您依赖的那些依赖项,然后它们就会破坏)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

插件和主题之间的依赖冲突 的相关文章

  • PHP preg_replace - www 或 http://

    真正坚持看似简单的事情 我有一个聊天框 喊叫框 其中可能输入任意 URL 我想找到每个单独的 URL 用空格分隔 并将其包装在标签中 例子 Harry you re a http google com http google com wiz
  • 解析错误:语法错误,意外的“”(T_ENCAPSED_AND_WHITESPACE)[重复]

    这个问题在这里已经有答案了 完整错误 解析错误 语法错误 意外的 T ENCAPSED AND WHITESPACE 需要标识符 T STRING 或 变量 T VARIABLE 或数字 T NUM STRING 它说错误出现在第 12 行
  • PHP DateTime::修改加减月份

    我一直在与DateTime class http www php net manual en class datetime php最近在添加月份时遇到了我认为是一个错误 经过一番研究后 看来这不是一个错误 而是按预期工作 根据查到的文档he
  • Facebook“喜欢”按钮,喜欢另一个页面/URL

    我有一个链接列表 每个单独的页面上都有一个 喜欢 按钮来 喜欢 该页面 但我想要列表中每个链接旁边有一个 喜欢 按钮 该按钮会喜欢旁边链接的 URL 就像单击链接然后单击 喜欢 按钮一样 我该怎么做呢 要在每个单独的页面上创建按钮 我使用以
  • PHP:会话 |无法解码会话对象

    我尝试将电子商务功能添加到遗留项目中 因此我仍然需要旧的会话处理程序 我使用 PHP v7 1 14 和 Session2DB https github com voku session2db tree 4 0 0 https github
  • 图像上的文字

    是否可以在 php 中动态地将文本放置在图像上 然后将其发送到 rss feed 是的 可以使用GD http www php net gd函数或图像魔术师 http www php net imagemagick功能 具体取决于您的服务器
  • $_COOKIE[] 设置后似乎没有反映更改

    我不记得过去使用 Cookie 时遇到过很多问题 但我在尝试时遇到了一些意想不到的结果 我在本地主机上运行 因此我的域设置 这将产生以下输出 Cookie Set Cookie equals 457718770 shou
  • php 验证整数[重复]

    这个问题在这里已经有答案了 我想知道为什么这不起作用 echo gettype GET id returns string if is int GET id echo Integer 如何验证从 GET POST 传递的数据是否为整数 Ca
  • 订单编辑页面中的 WooCommerce 自定义字段

    Display custom field Orders edit page add action woocommerce before order itemmeta storage location of order items 10 3
  • 如何在 Doctrine 中使用 andWhere 和 orWhere ?

    WHERE a 1 AND b 1 Or b 2 AND c 1 OR c 2 我怎样才能在教义中做到这一点 q gt where a 1 q gt andWhere b 1 q gt orWhere b 2 q gt andWhere c
  • 我们在哪里/什么时候使用 JSON?

    你能告诉我 JSON 有什么用 在 Javascript 和 PHP 中 当我们需要 JSON 方法时 我从以下链接中阅读 但是 我没有获得有关任何项目的 JSON 实现的任何信息 http www json org js html htt
  • 如何在没有数据库的情况下创建AJAX分页?

    是否可以在没有 MySQL 帮助的情况下获取 AJAX 分页页面 难道我不能只添加一个包含我需要显示的文本和标记的 PHP 文件 然后通过单击页码将该内容提供给用户吗 那么可以用纯 jQuery 和 PHP 来实现吗 您会使用什么代码方法来
  • 将程序存储在 phpMyAdmin 中

    我必须将存储过程添加到 MySQL 数据库 问题是托管提供php我的管理员来管理数据库 我在网上搜索了一下 想法是运行创建程序的MySQL本机语句 但由于程序的代码通常可能有 我们必须更改 MySQL 中的分隔符 php我的管理员没有这个选
  • php 删除特定文件夹及其所有内容

    我正在使用 php 删除包含已删除帖子图像的文件夹 我正在使用下面的代码 这是我在网上找到的并且做得很好 我想知道当一个文件夹中有其他文件夹时 如何只删除其中的特定文件夹 当我使用下面的代码时 如何才能做到这一点 使用 dev images
  • 如何使用 jquery imgAreaSelect 用 php 裁剪图像?

    我正在使用以下 javascript 代码来实例化 jquery图像区域选择 http odyniec net projects imgareaselect 裁剪我的图像 document ready function ladybug im
  • PHP 中的数据清理[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP filesize() 适用于除一个文件之外的所有文件,给出 stat failed 错误

    我正在编写一个 PHP 页面 该页面通过抓取现有 HTML 页面来生成播客提要 一切正常 但我的 mp3 文件之一出现 filesize stat failed 错误 据我所知 该文件没有损坏 并且播放得很好 我还将文件重新上传到服务器 它
  • 创建具有动态更新变量的数组

    我有一些 PHP 变量 它们的名称直接链接到它们包含的函数 是否有办法自动创建这些变量 以便我可以使用所有变量 00 200 这就是我现在正在做的事情 regdays00 is user reg matured 00 regdays02 i
  • 在php中获取真实IP的问题

    我用它来获取真实IP 但我从 SERVER HTTP CLIENT IP 我仅从 SERVER REMOTE ADDR 但是我不需要代理的IP 我需要使用某些内网的计算机的真实IP 我能得到它吗 什么时候 SERVER HTTP CLIEN
  • PHP 启动:运行单元测试时无法加载动态库

    当我尝试运行单元测试时 出现此错误 PHP 警告 PHP 启动 无法加载动态库 bz2 尝试过 xampp php ext bz2 找不到指定的模块 xampp php ext php bz2 dll 找不到指定的模块 在未知的第 0 行

随机推荐