Lý do là PHP xử lý các biến trong một cách đặc biệt ngữ cảnh. Nó hơi giống với Visual Basic.
Biểu thức 'a' + 1
sử dụng tính toán bổ sung. Trong bối cảnh này a
được hiểu là một số, vì vậy nó sẽ được coi là 0 (nếu bạn đã quen thuộc với C, nó giống như ăn chuỗi "a" vào atoi()
).
Nếu bạn muốn sử dụng cụm từ 'a' . 1
kết quả sẽ là a1
do sử dụng nối chuỗi.
Để nhận kết quả bạn mong đợi (b
), bạn phải sử dụng chr(ord('a') + 1)
, trong đó ord()
trả về giá trị ASCII của ký tự (đầu tiên) một cách rõ ràng.
$a++
là trường hợp đặc biệt, về bản chất là quá tải xem giá trị ascii thay vì giá trị chính nó làm biến.
Ý của bạn là gì? : "Đặc biệt là kể từ khi các nhà khai thác giảm dần là một no-op trong trường hợp này". – Shubham
Thực ra, tôi sẽ không gọi nó là kỳ quặc. Về cơ bản, nó tuân theo các quy tắc toán học tiêu chuẩn bằng cách sử dụng cơ sở 25 (với các chữ thay vì số). – Mario
@Shubham "No-op" có nghĩa là "không hoạt động", tức là không có gì xảy ra. Nó được giải thích ở đây ngay trước ví dụ đầu tiên: http://php.net/manual/en/language.operators.increment.php – Mario