2010-11-03 3 views
0

Можно создать дубликат:
what's an actual use of variable variables?Есть ли случай, когда переменные переменные PHP делают решение более понятным?

Есть ли случай, в котором переменные переменные PHP делают решение яснее?

E.g. это:

$a = 'hello'; 
$$a = 'hello, world!'; 

echo $hello; 
+0

http://www.reddit.com/r/programming/comments/dst56/today_i_learned_about_php_variable_variables/ – philfreo

+6

возможно дубликат [дубликат] (HTTP: //stackoverflow.com/questions/3582043/variable-variables-when-useful-closed) [дубликата] (http://stackoverflow.com/questions/3523670/whats-an-actual-use-of-variable- переменные) с еще несколькими [дубликатами] (http://stackoverflow.com/questions/1003605/when-to-use-a-variable-variable-in-php). – meagar

+0

@meagar Дубликаты и дубликаты, стороны друг от друга? – Rudu

ответ

1

Мой пример не точно над переменными переменных, но он похож по замыслу, так как она включает в себя доступ к константы класса из переменной, содержащей экземпляр класса для целей ясности.

Когда вы не используете пространство имен, в конечном итоге имена классов становятся довольно длинными. На этой неделе я написал код, который должен был сделать некоторые инструкции switch, чтобы определить сообщение для записи из результата из старой системы, но я не хотел напрямую сравнивать результат с результатом, поэтому я помещал код как константу в класс.

Представьте это еще семь случаев.

switch ($resultFromReset) { 
     case Application_Users_Results_PasswordResetResult::NEW_PASSWORD_CHANGED_AND_EMAIL_SENT: 
      $resultMessage = 'Please check your e-mail for instructions'; 
      break; 

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

Итак, чтобы облегчить себе, я сохранил новый класс в переменной и ссылался на константы из этого.

$ResultCode = new Application_Users_Results_PasswordResetResult(); 

    switch ($resultFromReset) { 
     case $ResultCode::NEW_PASSWORD_CHANGED_AND_EMAIL_SENT: 
      $resultMessage = 'Please check your e-mail for instructions'; 
      break; 

Переменная здесь содержит код, чтобы сделать его более разборчивым.

Я мог бы взять его на шаг ближе к примеру с:

$ResultCode = "Application_Users_Results_PasswordResetResult"; 

    switch ($resultFromReset) { 
     case $ResultCode::NEW_PASSWORD_CHANGED_AND_EMAIL_SENT: 
      $resultMessage = 'Please check your e-mail for instructions'; 
      break; 

Но я не хочу, чтобы сделать жизнь трудной для следующей бедной душе, пришлось переименовать мою постоянную!

Таким образом, хотя это не совсем то же самое, это дает вам пример реальной жизни для нескольких возможных применений переменных переменных.

(Но лично я бы сказал, держаться подальше!)

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

  • Нет связанных вопросов^_^