【问题标题】:Composer.phar difference between | and ||Composer.phar 之间的区别 |和 ||
【发布时间】:2017-06-18 05:16:39
【问题描述】:

composer.json 文件中的管道和双管道有什么区别?例如:

"^1.0.0 || ^2.0.0"

'^1.0.0|^2.0.0'

【问题讨论】:

  • 根据我的发现,它们是相同的。虽然可能不对
  • ||它被视为逻辑或
  • @Shanukk 好的,那么逻辑或和单管道有什么区别?

标签: php composer-php semantic-versioning


【解决方案1】:

它们是一样的。

如果您查看 VersionParser 类 (https://github.com/composer/semver/blob/1dd67fe56c0587d0d119947061a6bfc9863c101c/src/VersionParser.php#L237),您可以看到以下代码:

$orConstraints = preg_split('{\s*\|\|?\s*}', trim($constraints));

正如我们在正则表达式中看到的,它们是 ?在第二个管道之后,使其成为可选。

似乎只记录了双管道。 (https://getcomposer.org/doc/articles/versions.md#range)

【讨论】:

  • 单管道已弃用,但为了向后兼容而保留。您的 preg_split 参考是正确的。
  • 本期here也讨论了这个问题。他们删除了单个管道的文档,但它仍然具有向后兼容性的功能。
【解决方案2】:

我认为这是作曲家 OR 逻辑运算符的旧语法。 我找到了这个参考:http://qpleple.com/understand-composer-versions(搜索管道字符)

在介绍中说:

以下是 Composer 文档中的一些摘录,已重新组织为 更好地了解软件包版本和稳定性的工作原理

但我在当前的作曲家文档中找不到任何参考资料,我认为这是来自旧版本的文档

【讨论】:

    【解决方案3】:

    不同之处在于 | (单管道)是按位或和|| (双管)是逻辑或 ||是逻辑 OR 运算符。听起来你基本上知道那是什么。它用于条件语句,例如 if、while 等。

    condition1 || condition2
    

    "||" 将从第一个开始依次检查。如果发现序列中的任何条件为真,则 ||停止进一步检查。所以 ||在条件语句中效率更高

    |是按位或运算符。它用于对两个数字进行操作。您单独查看每个数字的每个位,如果其中一个位在至少一个数字中为 1,则结果位也将为 1。以下是几个例子:

    A = 01010101
    B = 10101010
    A | B = 11111111
    
    A = 00000001
    B = 00010000
    A | B = 00010001
    

    【讨论】:

    • ^1 很好,很好的解释。
    • @Shanukk 我了解按位运算符的工作原理,但我不明白版本约束有什么区别。看两个例子 ^1.5.0 | ^2.0.0^1.5.0 || 2.0.0^1.5.0 只能返回真或假,对吗? ^2.0.0 也只能返回真或假,对吧?所以,没有区别: bool |布尔 AND 布尔||布尔。正确的?如果是,有什么区别?如果不是,composer.phar 中有两个不同的运算符是什么原因?
    • 在composer.phar版本约束中|||没有区别
    • 这个答案根本不适用。将它们用作作曲家版本约束的这些运算符之间没有这种区别。
    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 2020-05-10
    • 2014-09-20
    • 2010-10-28
    • 2015-10-04
    • 2012-08-12
    • 2011-02-18
    • 2019-12-21
    相关资源
    最近更新 更多