2012-09-05 37 views
5

Đôi khi trong khi khởi tạo biến, bạn muốn chuyển các giá trị quá phức tạp để được tính toán trong một lệnh, vì vậy bạn thường tính toán biến giả trước và sau đó chuyển giá trị của nó hoặc xác định hàm ở nơi khác và chuyển giá trị trả về của nó cho biến của chúng tôi.Biến tính toán trên máy bay bằng cách sử dụng các hàm ẩn danh

Câu hỏi của tôi (mong muốn) là, thay vào đó có thể tính toán một biến trên máy bay bằng các hàm ẩn danh không?

ví dụ, thay vì sử dụng này:

$post = get_post(); 
$id = $post->ID; 

$array = array(
    'foo' => 'hi!', 
    'bar' => $id 
); 

Cho phép sử dụng một cái gì đó như thế này:

$array = array(
    'foo' => 'hi!', 
    'bar' => (function(){ 
     $post = get_post(); 
     return $post->ID; 
    }) 
); 

Mã là totaly ngẫu nhiên.

+2

Bạn đã thử chưa? – PeeHaa

+1

"Mã hoàn toàn ngẫu nhiên". một sự kết hợp rất không chắc chắn của các chữ cái đến từ bất kỳ loại thế hệ ngẫu nhiên –

+0

@ PeeHaa có, nó trả về Closure :: __ set_state (array ( )) vì các bao đóng là các cá thể của lớp Closure. – Bakaburg

Trả lời

1

Trong ví dụ của bạn, sau đây sẽ làm tốt:

$array = array('foo'=>'hi!','bar'=>(get_post()->ID)); 

Tuy nhiên, với việc xem xét cho câu hỏi của bạn cởi mở hơn một chút kết thúc và không cụ thể cho đoạn mã của bạn, bạn có thể tìm stackoverflow answer acceptable này.

$a = array('foo' => call_user_func(
    function(){ 
     $b = 5; 
     return $b; 
    }) 
); 
var_dump($a); 
+0

đó là hoàn toàn nó! – Bakaburg

+0

một câu hỏi phụ: tại sao bạn đặt $ trước ID vào (get_post() -> $ ID)? và dấu ngoặc đơn là cần thiết? – Bakaburg

+1

@Bakaburg xấu của tôi trên $ trước ID, tôi đã cập nhật bài đăng với cú pháp thích hợp. cũng parens có nhiều khả năng không cần thiết, tôi chỉ không kiểm tra mã của tôi và đã chơi nó an toàn :) – zamnuts

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