2014-12-21 3 views
0

Я изучаю PHP на некоторое время сейчас, и я столкнулся с функциональными возможностями манипуляции, официально называемыми Variable Variables. Основной синтаксис:Переменные переменные - ошибки и достоверность

$foo = 'bar'; 
$$foo = 'foo2'; 

В результате этих двух утверждений $foo равна bar, и новая переменная, $bar равна foo2.

Я ожидаю, что если переменная $foo содержит номер, это приведет к некоторой ошибке. Что произойдет, если значение $foo изначально установлено на недопустимое имя переменной? Какая ошибка будет выброшена?

+2

Написать тестовый скрипт и попробовать. – mopo922

ответ

2

Ошибка будет выброшена.

PHP Docs on Variables утверждает, что переменные должны соответствовать следующему регулярному выражению:

[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* 

Однако это правило только исполнение анализатором. PHP поддерживает переменные с именем что угодно, парсер просто применяет определенные соглашения об именах.

Вы можете проверить это сами:

$foo = '1'; 
$$foo = 'baz'; 
print_r(get_defined_vars()); 
/* 
Prints: 
Array 
(
... 
[foo] => 1 
[1] => baz 
) 
*/ 
+0

+ 1 для этой регс и ссылки ссылки –

1

Вы можете попробовать его с помощью этого простого скрипта:

<?php 
    $foo='1'; 
    $$foo='hello world'; 
    echo $$foo; 
?> 

и это одна:

<?php 
    $foo='1'; 
    $$foo='hello world'; 
    echo $1; 
?> 

В принципе, никакой ошибки не будет если вы это сделаете. Однако вы должны получить доступ к новой переменной как $$foo, а не как $1. Если вы запустите оба сценария, первый скажет «привет мир», а второй даст ошибку в файле журнала.

EDIT: Спасибо @ Fabrício Matte для сказать, что вы можете получить доступ к нему, как это:

<?php 
    $foo='1'; 
    $$foo='hello world'; 
    echo ${1}; 
?> 
+1

Его также можно использовать как '$ {1}' btw. –

+0

Какой хороший пример ПОЧЕМУ вы бы это использовали? –

+0

Нельзя использовать '$$' (или '$ {}'). Не используйте его. – Halcyon

Смежные вопросы