2010-09-04 21 views
5

tôi đang học một số mã tôi tìm thấy trên các trang web thời gian gần đây, và đã xem qua cú pháp php này:Strange biến phân

<?php $framecharset && $frame['charset'] = $framecharset; ?> 

Ai đó có thể giải thích những gì đang xảy ra trong dòng mã này? Biến nào đang được gán (các) giá trị nào và mục đích của nhà điều hành & & là gì, ở vị trí đó của tuyên bố?

Cảm ơn! Pat

Trả lời

3

Ah, tôi chỉ viết một bài đăng blog về thành ngữ này trong javascript:

http://www.mcphersonindustries.com/

Về cơ bản nó là thử nghiệm để thấy rằng $framecharset tồn tại, và sau đó cố gắng để gán nó vào $frame['charset'] nếu nó là phi -vô giá trị.

Cách thức hoạt động của nó là phiên dịch viên lười. Cả hai bên của tuyên bố && cần phải đúng để tiếp tục. Khi nó gặp một giá trị false, theo sau là &&, nó dừng lại. Nó không tiếp tục đánh giá (vì vậy trong trường hợp này, nhiệm vụ sẽ không xảy ra nếu $framecharsetfalse hoặc null).

Một số người thậm chí sẽ đặt một nửa "đắt tiền" hơn biểu thức boolean sau &&, để nếu điều kiện đầu tiên không phải là true thì bit đắt tiền sẽ không bao giờ được xử lý. Có thể cho rằng điều này thực sự có thể tiết kiệm được bao nhiêu, nhưng nó sử dụng nguyên tắc tương tự.

+0

lời giải thích của bạn là rất rõ ràng. Cảm ơn bạn. – cube

+0

Alex, cú pháp tương đương javascript chính xác sẽ như thế nào? – cube

+0

Ồ, tôi thấy nó trên blog của bạn, Cảm ơn. – cube

2

&& trong PHP là ngắn mạch, có nghĩa là RHS sẽ không được đánh giá nếu LHS đánh giá là false, bởi vì kết quả sẽ luôn luôn được false.

Mã của bạn:

$framecharset && $frame['charset'] = $framecharset; 

tương đương với:

if($framecharset) { 
    $frame['charset'] = $framecharset; 
} 

nào gán giá trị của $framecharset như giá trị cho mảng phím charset chỉ nếu giá trị đánh giá là true và trong PHP

Tất cả các chuỗi đều đúng trừ hai: chuỗi chứa gì cả và một chuỗi chỉ chứa các nhân vật