Qual è la differenza tra il | e || gli operatori?

| e || – Qual è la differenza tra questi due operatori in PHP?

| è un bit a bit o, || è un boolean o.

Senso

| è un operatore binario, sarà binario O i bit di entrambi i valori di mano destra e sinistra.

|| è un operatore boolean, si accorgerà quando incontra 'vero' (qualsiasi valore diverso da zero, questo include gli arrays non vuoti).

Esempi

 print_r(1 | 2) // 3 print_r(1 || 2) // 1 

Se utilizzato con funzioni:

 function numberOf($val) { echo "$val, "; return $val; } echo numberOf(1) | numberOf(2); // Will print 1, 2, 3 echo numberOf(1) || numberOf(2); // Will print 1, 1 

Proprio come l'operatore & e &&, il doppio operatore è un operatore "cortocircuito".

Per esempio:

if (condizione1 || condizione2 || condizione3) Se condizione1 è vera, le condizioni 2 e 3 NON saranno verificate.

if (condition1 | condition2 | condition3) Controlla le condizioni 2 e 3, anche se 1 è già vero. Poiché le tue condizioni possono essere funzioni piuttosto costose, puoi ottenerne una buona

aumento delle performance usando loro.

C'è un grande avvertimento, NullReferences o problemi simili. Per esempio:

if (class! = null && class.someVar <20) Se la class è nullo, l'istruzione if si fermerà dopo "class! = null" è false. Se usi solo &, cercherà di controllare class.someVar e otterrai un

bella NullReferenceException. Con l'operatore Or potrebbe non essere una trappola in quanto è improbabile che tu faccia scattare qualcosa di brutto,

ma è qualcosa da tenere a mente.

Nessuno usa mai il singolo & o | operatori però, a less che tu non abbia un design in cui each condizione è una function che HA l'essere

eseguito. Sembra un odore di design, ma a volte (raramente) è un modo pulito per fare cose. L'operatore & "esegue queste 3 funzioni,

e se uno di questi restituisce false, esegui il block else ", mentre il command" fa "solo il block else se non restituisce false" – può essere utile,

ma come detto, spesso è un odore di design.

| opera sui bit di una variabile: 2 | 4 = 6

|| opera su Il valore boolean di una variabile: 2 || 4 = VERO

| -> operatore binario || -> Operatore boolean o -> anche un operatore boolean con precedenza più bassa

 $x = false | true; //will set $x to an integer $x = false || true; //will set $x to true $x = false or true; //will set $x to false exactly the same that: ($x = false) || true;