2012-03-17 17 views
8

Volevo concatenare 2 variabili e, per errore, ho digitato un altro codice e ho ottenuto uno strano risultato.Accesso ai tubi Codice PHP

Questo è quello che appare come il codice:

echo 'Hello World' | 'test'; 

Result : |e|o World 

ciò che il segno tubo di fare se non concatenato?

+2

http://www.php.net/manual/en/language.operators.bitwise.php –

+1

in quale lingua '' 'concatena? –

+2

Per quanto ne so, la maggior parte della lingua non usa '|' per concatizzare la stringa. Normalmente usa '.' o' + ' – Rezigned

risposta

5

Secondo il PHP manual

"|" è un "OR bit a bit". Gli operatori bit a bit consentono la valutazione e la manipolazione di bit specifici all'interno di un intero.

Example   Name       Result 
$a | $b  Or (inclusive or)  Bits that are set in either $a or $b are set. 

Esempio:

$a = 9; 
$b = 10; 
echo $a | $b; 

Questa generando il numero 11 come segue:

         1 Byte (8 bits) 
Place Value   128 64 32 16 8 4 2 1 
$a      0  0  0  0 1 0 0 1 = 9 
$b      0  0  0  0 1 0 1 0 = 10 
$a | $b     0  0  0  0 1 0 1 1 = 11 

Se nota abbiamo 3 bit impostato, in 8, 2 e 1 colonna .. aggiungere quelli su 8 + 2 + 1 e si ottiene 11.

Per la semplice concatenazione di stringhe utilizzare l'operatore punto ..

Speranza che lo chiarifica.

+0

modo superbo per farmi capire .. Ero così confuso perché 1 | 1 = 2 e 1 | 3 = 3? E mi hai insegnato bene. Dio ti benedica :) – MFarooqi

5

E 'l'operatore OR bit a bit

Se si vuole concat stringa si dovrebbe usare dot

echo "ABC" . "DEF"; 

Esempio di utilizzo OR bit a bit

// base 16 - result in 0x03 
$result = 0x01 | 0x02; 

// base 2 
0000 0001 
0000 0010 
--------- 
0000 0011 
1

Direi che si tratta di un OR bit a bit

3

Quello | significa 'bitwise OR', che converte le stringhe in binario, quindi le sovrappone l'una sull'altra per calcolare il risultato utilizzando l'OR logico per ogni posizione, ovvero se una stringa ha un 1 in quella posizione, il risultato avrà un 1, altrimenti Otterrai uno 0.

In questo caso, lo fa con i codici carattere ascii numerici di ciascun carattere, che a volte portano a nuovi codici di caratteri e talvolta a rifiuti, che non verranno visualizzati. Questo è il motivo per cui l'inizio di "Hello world" è incasinato, in cui è sovrapposto a "test", ma la fine è soddisfacente perché non ha nessun 1 aggiunto ad esso da un'altra stringa in quel punto. Vedi here per un esempio più dettagliato dal manuale (usa XOR, ma la stessa idea).

Utilizzo. per concatenazione.