2011-11-26 12 views
5

यह शायद एक सरल सवाल है, और मुझे डर है कि इस सवाल का जवाब "नहीं" हो सकता है हूँ, लेकिन ...PHP में अज्ञात सरणी के किसी विशिष्ट तत्व को संदर्भित करना संभव है?

यहाँ कोड का एक सरल टुकड़ा है:

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

अब ... इस Can अस्थायी चर के बिना किया जाना चाहिए? किसी अन्य भाषा में, मैं कहना है सक्षम होने के लिए उम्मीद कर सकते हैं:

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

ओह, PHP में, यह एक त्रुटि में परिणाम है:

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

यह नहीं किया जा सकता है, तो यह नहीं कर सकते किया जाना चाहिए, और मैं एक अस्थायी चर का उपयोग करूंगा, लेकिन मैं नहीं चाहता।

उत्तर

6

नहीं, दुर्भाग्यवश दुर्भाग्यवश PHP के मौजूदा संस्करणों में समर्थित नहीं है, लेकिन जाहिर है कि PHP 5.4 में आ जाएगा।

भी Terminology question on "dereferencing"? देखें।

1

ऐरे डेरफ़्रेंसिंग अभी PHP 5.3 में उपलब्ध नहीं है, लेकिन यह PHP 5.4 (PHP 5.4.0 RC2 is currently available for you to tinker with) में उपलब्ध होगा। इस बीच, आप end(), reset(), या आप जो चाहते हैं उसे प्राप्त करने के लिए एक सहायक कार्य का उपयोग कर सकते हैं।

$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; 
    } 
} 

ध्यान दें कि end() और current() सरणी के आंतरिक सूचक रीसेट कर देगा, इसलिए सावधान रहना।

आपकी सुविधा के लिए, आप अपने dereferences चेनिंग हो जाएगा अगर यह उपयोगी हो सकता है:

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'] 
संबंधित मुद्दे