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

Возможный дубликат:
что такое реальное использование переменных переменных?

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

Например, это:

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

echo $hello;

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;

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

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

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

Другие вопросы по тегам