Đối với trường hợp rất phổ biến của gán một giá trị cho một biến dựa trên kết quả của một biểu thức Tôi là một fan hâm mộ của các nhà khai thác ternary:có điều kiện giao PHP đánh giá cao
$foo = $bar ? $a : b;
Tuy nhiên, nếu $ thanh là một tương đối hoạt động đắt tiền và tôi muốn gán kết quả của $ thanh đến $ foo nếu kết quả là truthy, điều này là không hiệu quả:
$foo = SomeClass::bigQuery() ? SomeClass::bigQuery() : new EmptySet();
Một lựa chọn là:
$foo = ($result = SomeClass::bigQuery()) ? $result : new EmptySet();
Nhưng tôi không muốn có thêm $result
ngồi trong bộ nhớ.
Các lựa chọn tốt nhất tôi nhận được là:
$foo = ($foo = SomeClass::bigQuery()) ? $foo : new EmptySet();
Hoặc, mà không khai thác ternary:
if(!$foo = SomeClass::bigQuery()) $foo = new EmptySet();
Hoặc, nếu các nhà khai thác dòng chảy chương trình không phải là phong cách của bạn:
($foo = SomeClass::bigQuery()) || ($foo = new EmptySet());
Vì vậy, nhiều tùy chọn, không phải của họ thực sự thỏa đáng. Mà bạn sẽ sử dụng, và tôi thiếu một cái gì đó thực sự rõ ràng ở đây?
Cá nhân tôi tránh PHP 5.3 chỉ cú pháp và thích '$ x = đắt hơn(); nếu (!$ x) $ x = $ mặc định; ' – meagar
Ồ; Tôi đã chỉ đi để bình luận với "PHP cần phần mở rộng [GNU cho ternaries] (http://stackoverflow.com/questions/3319075/ternary-conditional-operator-behaviour-when-leaving-one-expression-empty)" –
ah ha - bỏ lỡ điều đó trong sách hướng dẫn. Tôi giả định rằng có nghĩa là không có một phương pháp tốt hơn cho 5.2.x (mà tôi phải hỗ trợ trong trung hạn)? – Hamish