Php 作曲家.法尔|与||

Php 作曲家.法尔|与||,php,composer-php,semantic-versioning,Php,Composer Php,Semantic Versioning,composer.json文件中的管道和双管道有什么区别?例如: "^1.0.0 || ^2.0.0" 及 区别在于|(单管)是位或,|(双管)是逻辑或 ||是逻辑OR运算符。听起来你基本上知道那是什么。它用于条件语句,如if、while等 condition1 || condition2 “| |”将按从第一个开始的顺序签入。如果发现序列中的任何条件为真,则| |停止进一步检查。因此| |在条件语句中更有效 |是按位OR运算符。它用于对两个数字进行运算。您单独查看每个数字的每个位,如果其中

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

"^1.0.0 || ^2.0.0"


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

condition1 || condition2
“| |”将按从第一个开始的顺序签入。如果发现序列中的任何条件为真,则| |停止进一步检查。因此| |在条件语句中更有效

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

A = 01010101
B = 10101010
A | B = 11111111

A = 00000001
B = 00010000
A | B = 00010001

我认为这是作曲家或逻辑运算符的旧语法。 我找到了这个参考:(搜索管道字符)

导言中说:

下面是一些从Composer的文档中摘录的内容,这些文档被重新组织为 更好地理解包版本和稳定性是如何工作的

但是我在当前的composer文档中找不到任何引用,那么我假设这是来自旧版本的文档,它们是相同的

如果查看VersionParser类(),可以看到以下代码:

$orConstraints = preg_split('{\s*\|\|?\s*}', trim($constraints));
正如我们在正则表达式中看到的,它们是一个?在第二个管道之后,使其成为可选的

但似乎只有双管道被记录在案。
()

根据我的发现,它们是一样的。可能不正确,但它被视为合乎逻辑OR@Shanukk好的,那么逻辑or和单管道之间有什么区别呢?
^1
很好,解释得很好。@Shanukk我理解按位运算符的工作原理,但我不理解版本约束的区别。请看两个示例^1.5.0 | ^2.0.0和^1.5.0 | 2.0.0^1.5.0只能返回true或false,对吗^2.0.0也只能返回true或false,对吗?所以,bool | bool和bool | bool之间没有区别。正确的?如果是,有什么区别?如果否,那么composer.phar中两个不同运算符的原因是什么?在composer.phar版本约束中,
|
|
之间没有区别。这个答案根本不适用。使用它们作为编写器版本约束的这些运算符之间没有这样的区别。不推荐使用单个管道,但保留该管道是为了向后兼容。您的preg_split参考非常准确。本期中也讨论了这一点。他们删除了单个管道的文档,但为了向后兼容,它仍然可以正常工作。
$orConstraints = preg_split('{\s*\|\|?\s*}', trim($constraints));