2011-11-26 25 views
5

Đây có lẽ là một câu hỏi đơn giản, và tôi e rằng câu trả lời có thể là "không", nhưng ...Có thể tham khảo một phần tử cụ thể của một mảng ẩn danh trong PHP không?

Dưới đây là một đoạn mã đơn giản:

function func1() { 
    $bt = debug_backtrace(); 
    print "Previous function was " . $bt[1]['function'] . "\n"; 
} 

Bây giờ ... Can này được thực hiện mà không có biến tạm thời? Trong ngôn ngữ khác, tôi có thể mong đợi để có thể nói:

function func1() { 
    print "Previous function was " . (debug_backtrace())[1]['function'] . "\n"; 
} 

Than ôi, trong PHP, điều này dẫn đến một lỗi:

PHP Parse error: syntax error, unexpected '[' ... 

Nếu nó không thể được thực hiện, nó có thể không được thực hiện, và tôi sẽ sử dụng một biến tạm thời, nhưng tôi không muốn.

Trả lời

6

Không, dereferencing trực tiếp không may không được hỗ trợ trong các phiên bản hiện tại của PHP, nhưng dường như sẽ có trong PHP 5.4.

Đồng thời xem Terminology question on "dereferencing"?.

1

Dereferencing mảng không có sẵn trong PHP 5.3 ngay bây giờ, nhưng nó sẽ có sẵn trong PHP 5.4 (PHP 5.4.0 RC2 is currently available for you to tinker with). Trong thời gian chờ đợi, bạn có thể sử dụng end(), reset() hoặc chức năng trợ giúp để có được những gì bạn muốn.

$a = array('a','b','c'); 
echo reset($a);   // echoes 'a' 
echo end($a);   // echoes 'c' 
echo dereference($a, 1); // echoes 'b' 

function dereference($arr, $key) { 
    if(array_key_exists($key, $arr)) { 
     return $array[$key]; 
    } else { 
     trigger_error('Undefined index: '.$key); // This would be the standard 
     return null; 
    } 
} 

Lưu ý rằng end()current() sẽ thiết lập lại con trỏ nội bộ của mảng, vì vậy hãy cẩn thận.

Để tiện cho bạn, nếu bạn sẽ được chaining dereferences bạn này có thể có ích:

function chained_dereference($arr, $keys) { 
    foreach($keys as $key) { 
     $arr = dereference($arr, $key); 
    } 

    return $arr; 
} 

// chained_dereference(debug_backtrace(), array(1, 'function')) = debug_backtrace()[1]['function'] 
Các vấn đề liên quan