2012-03-17 34 views
8

Tôi muốn ghép 2 biến và do lỗi tôi đã nhập một mã khác và tôi nhận được kết quả lạ.Dấu hiệu đường ống trong Mã PHP

Đây là những gì trông giống như mã:

echo 'Hello World' | 'test'; 

Result : |e|o World 

gì dấu ống làm gì nếu không nối?

+2

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

+1

trong ngôn ngữ nào '|' ghép nối? –

+2

Theo như tôi biết, hầu hết các ngôn ngữ không sử dụng '|' để chuỗi concat. Thông thường nó sử dụng '.' hoặc' + ' – Rezigned

Trả lời

5

Theo số PHP manual

"|" là "bitwise OR". Các toán tử bitwise cho phép đánh giá và thao tác các bit cụ thể trong một số nguyên.

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

Ví dụ:

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

này sẽ ra số 11 như sau:

         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 

Nếu bạn nhận thấy chúng tôi đã 3 bit được thiết lập, trong 8, 2, và 1 cột .. thêm những người lên 8 + 2 + 1 và bạn nhận được 11.

Đối với nối chuỗi đơn giản, sử dụng dấu chấm . toán tử.

Hy vọng làm rõ điều đó.

+0

cách tuyệt vời để làm cho tôi hiểu .. Tôi đã rất bối rối tại sao 1 | 1 = 2, và 1 | 3 = 3? Và bạn đã dạy tôi rất tốt. Chúa phù hộ bạn :) – MFarooqi

5

Đó là các nhà điều hành OR Bitwise

Nếu bạn muốn concat chuỗi bạn nên sử dụng dot

echo "ABC" . "DEF"; 

Ví dụ về việc sử dụng OR Bitwise

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

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

Tôi đoán rằng đó là một Bitwise OR

3

Điều đó | có nghĩa là 'bitwise OR', sẽ chuyển đổi chuỗi thành nhị phân, sau đó chồng chúng lên nhau để tính kết quả bằng cách sử dụng OR hợp lý cho mỗi vị trí, nếu chuỗi có 1 ở vị trí đó, thì kết quả sẽ có 1, nếu không , bạn sẽ nhận được 0.

Trong trường hợp này, nó thực hiện điều này với mã ký tự ascii bằng số của mỗi ký tự, đôi khi dẫn đến mã ký tự mới và đôi khi chuyển sang thùng rác, sẽ không hiển thị. Đây là lý do tại sao sự khởi đầu của 'Hello world' bị rối tung lên, nơi nó được phủ lên với 'test', nhưng kết thúc là tốt bởi vì nó không có bất kỳ 1s được thêm vào nó bởi một chuỗi khác tại thời điểm đó. Xem here để biết ví dụ chi tiết hơn từ hướng dẫn sử dụng (sử dụng XOR, nhưng cùng một ý tưởng).

Sử dụng. cho nối.

Các vấn đề liên quan