2017-02-01 64 views
6

composer.json文件中的pipe和douoble管有什麼區別?例如:Composer.phar與|之間的區別和||

"^1.0.0 || ^2.0.0" 

'^1.0.0|^2.0.0' 
+0

從我發現,他們是一樣的。可能並不正確 – Antony

+0

||它被視爲合乎邏輯OR –

+1

@Shanukk ok,那麼邏輯或單管道之間的區別是什麼? – Roman678

回答

1

的不同之處在於| (單管)是按位或和|| (雙管)是邏輯或 ||是邏輯OR運算符。這聽起來像你基本上知道那是什麼。它用於if,while等條件語句中。

condition1 || condition2 

「||」將從第一個開始依次檢查。如果順序中的任何條件被發現是真的,則||停止進一步檢查在條件聲明中效率更高

|是按位或運算符。它用於對兩個數字進行操作。您可以分別查看每個數字的每個位,如果其中至少一個數字中的某個位爲1,則結果位也爲1。以下是一些示例:

A = 01010101 
B = 10101010 
A | B = 11111111 

A = 00000001 
B = 00010000 
A | B = 00010001 
+2

'^ 1'好的,很好的解釋。 –

+0

@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_ AND ** bool ||布爾**。 對不對? 如果是,有什麼區別?如果否,那麼composer.phar中兩個不同操作符的原因是什麼? – Roman678

+0

在composer.phar版本約束中,'|'和'||'沒有區別 – Ostin

1

我認爲這是作曲家或邏輯運算符的舊語法。 我發現這個參考:http://qpleple.com/understand-composer-versions(搜索管道字符)

在介紹它說:

以下是作曲家的文檔重組,以 更好一些提取了解軟件包版本穩定工作

但我在當前的作曲家文檔中找不到任何參考,那麼我認爲這是來自舊版本的文檔

8

他們是一樣的。

如果你看看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

+0

單個管道已被棄用,但爲了向後兼容而保留。你的preg_split參考是現貨。 – Scriptonomy