2011-01-20 39 views
14
$binary = b'Binary string'; 

Hậu quả của việc tạo chuỗi là b là gì?Chữ cái b trước chuỗi ký tự là gì?

Tôi không thể tìm thấy bất kỳ gợi ý nào về điều đó trong tài liệu. Chỉ tìm thấy chút tò mò này trong khi xem qua language_scanner.

+0

Điều này đã được thêm vào trong 5.2.1] (http://php.net/manual/en/language.types.type-juggling.php) - Bạn đang sử dụng phiên bản PHP nào? – Sampson

+0

Tôi đang sử dụng PHP 5.3.5. Nhưng tại sao tầm quan trọng đó lại quan trọng? – NikiC

+0

được thêm vào trong '6.0', đó là lý do tại sao nó quan trọng, ứng dụng nào trước' 6.0' nó sẽ nhiều hơn so với kết nối chuỗi để nó trở thành 'bBinary String' nhưng sẽ ném' E_NOTICE'. – RobertPitt

Trả lời

15

Đây là một khả năng tương thích thẻ phía trước cho PHP phiên bản không bao giờ-to-be-phát hành 6, nên đã có hỗ trợ unicode bản địa.

Trong PHP6, chuỗi là unicode theo mặc định và các hàm hoạt động ở cấp ký tự unicode trên chúng. Chữ "b" này có nghĩa là "chuỗi nhị phân", nghĩa là một chuỗi không phải là unicode, trên đó các hàm hoạt động ở cấp byte.

Điều này không có tác dụng trong PHP! = 6, trong đó tất cả các chuỗi đều là nhị phân.

+0

Ah, điều này làm cho nó rõ ràng. Thú vị là họ đã làm điều tương thích về phía trước. Có bất kỳ mã thông báo chuyển tiếp nào khác như vậy không? – NikiC

+0

Không phải là tôi biết ngoại trừ mã thông báo "(nhị phân)" có liên quan. – arnaud576875

1

Truyền nhị phân khả dụng kể từ 5.2.1 nhưng sẽ không có hiệu lực cho đến 6.0 khi chuỗi unicode cũng có hiệu lực.

nào giải thích tại sao điều này không có gì đặc biệt ngay bây giờ đối với tôi trên một máy chủ sử dụng 5.2.6:

<?php 
$t = b"hey"; 
var_dump($t); 
//string(3) "hey" 

$s = (binary)"hey"; 
var_dump($s); 
//string(3) "hey" 
?> 
Các vấn đề liên quan