Ответ 1
Нет, прямая разыменования, к сожалению, не поддерживается в текущих версиях PHP, но, по-видимому, будет представлена в PHP 5.4.
Также см. Терминологический вопрос о "разыменовании" .
Это, наверное, простой вопрос, и я боюсь, что ответ может быть "нет", но...
Вот простой фрагмент кода:
function func1() {
$bt = debug_backtrace();
print "Previous function was " . $bt[1]['function'] . "\n";
}
Теперь... Можно ли это сделать без временной переменной? На другом языке я мог бы ожидать, что смогу сказать:
function func1() {
print "Previous function was " . (debug_backtrace())[1]['function'] . "\n";
}
Увы, в PHP это приводит к ошибке:
PHP Parse error: syntax error, unexpected '[' ...
Если это невозможно сделать, это невозможно, и я буду использовать временную переменную, но я бы предпочел не делать этого.
Нет, прямая разыменования, к сожалению, не поддерживается в текущих версиях PHP, но, по-видимому, будет представлена в PHP 5.4.
Также см. Терминологический вопрос о "разыменовании" .
Разрушение массива недоступно в PHP 5.3 прямо сейчас, но оно будет доступно в PHP 5.4 (PHP 5.4.0 RC2 теперь доступен для вас с). Тем временем вы можете использовать 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()
будет reset внутренним указателем массива, поэтому будьте осторожны.
Для вашего удобства, если вы будете связывать свои разногласия, это может пригодиться:
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']