2012-03-17 23 views
8

Я хотел объединить 2 переменные, и по ошибке я набрал еще один код, и я получил странный результат.Pipe sign in PHP Code

Это то, что выглядит как код:

echo 'Hello World' | 'test'; 

Result : |e|o World 

Что знак трубы делать, если не сцепляются?

+2

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

+1

на каком языке '' 'concatenate? –

+2

Насколько я знаю, большая часть языка не использует '|' для concat string. Обычно используется '.' Или '+' – Rezigned

ответ

5

Согласно PHP manual

"|" является «побитовым ИЛИ». Побитовые операторы позволяют оценивать и манипулировать определенными битами внутри целого числа.

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

Пример:

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

Это выведет число 11 следующим образом:

         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 

Если вы заметили, мы 3 бита установлены, в 8, 2 и 1 столбец .. добавьте их до 8 + 2 + 1, и вы получите 11.

Для простой конкатенации строк используйте оператор dot.

Надеюсь, что это разъясняет.

+0

превосходный способ заставить меня понять .. Я был так смущен, почему 1 | 1 = 2 и 1 | 3 = 3? И ты научил меня хорошо. Будьте здоровы :) – MFarooqi

5

Это оператор OR побитового

Если вы хотите Concat строки, которую вы должны использовать dot

echo "ABC" . "DEF"; 

Пример использования OR побитового

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

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

Я бы предположил, что это побитовое ИЛИ

3

Это | означает «побитовое ИЛИ», которое преобразует строки в двоичные, затем накладывает их друг на друга для вычисления результата с использованием логического ИЛИ для каждой позиции, т. е. если каждая строка имеет 1 в этой позиции, тогда результат будет иметь 1, иначе , вы получите 0.

В этом случае это делается с числовыми символьными символами символа ascii каждого символа, что иногда приводит к появлению новых кодов символов, а иногда и к мусору, который не будет отображаться. Вот почему начало «Hello world» перепутано, где оно наложено «test», но конец прекрасен, потому что в нем нет ни одной добавленной к нему другой строки в этой точке. См. here для более подробного примера из руководства (использует XOR, но ту же идею).

Использование. для конкатенации.