2009-11-30 1 views
3

Я хочу сообщить своей функции, какую переменную вызывать, исходя из дня недели. День недели хранится в $ s_day, а переменные, которые я хочу вызывать, изменяются в зависимости от того, в какой день.Построить имя переменной PHP на основе других значений переменных и статического текста

например.

Я сохранил строку «Добро пожаловать в неделю» в $ d_monday_text1. Вместо того, чтобы создавать набор из 7 условных операторов (например, если date = monday echo $ foo, else if date = tuesday echo $ bar ...), могу ли я изменить имя переменной, вызываемой в функции, объединив имя переменная?

$s_day = date("l"); 
$text1 = '$d_'.$s_day.'_text1'; 

Я надеюсь, что это имеет значение $ d_monday_text1, который, как уже упоминалось выше, имеет значение «Добро пожаловать в неделю». Итак, позже я хотел бы использовать:

echo $text1; 

Чтобы получить итоговый результат = Добро пожаловать в неделю.

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

+0

возможно дубликат [? Могу ли я использовать сгенерированный имя переменной в PHP] (http://stackoverflow.com/ вопросы/130240/can-i-use-a-generated-variable-name-in-php) – outis

ответ

9

Переменные переменные не очень хорошая идея - Вы должны лучше использовать массивы. Они справляются с этой проблемой гораздо лучше.

Например, вы могли бы использовать что-то вроде этого:

$messages = array(
    'monday' => 'Welcome to the week', 
    'tuesday' => 'Blah blah', 
    'wednesday' => 'wed', 
    'thursday' => 'thu', 
    'friday' => 'fri', 
    'saturday' => 'sat', 
    'sunday' => 'week is over!' 
); 

$dayName = date('l'); 
echo $messages[$dayName]; 

Массивы формат данных используется для хранения нескольких связанных значений, таких как эти.

+0

Thanks Jani. Я думаю, что это будет работать для меньшего набора данных, чем у меня. Это соответствует приведенному примеру, что является упрощенным объяснением того, что я здесь делаю. – jkramp

+0

В общем, я думаю, что массивы должны использоваться всякий раз, когда у вас есть набор данных любого размера. Использование динамических имен для переменных, как правило, является плохой идеей, поскольку она не дает данным никакой структуры и делает код менее читаемым. –

+0

Хорошо, позвольте мне лапшу на нем немного больше, и я обновлю вопрос, есть ли лучший способ использовать массивы. Вероятно, из-за того, что мои данные структурированы, легче использовать динамическое выражение, чем массив. это не значит, что моя структура данных не является недостатком. – jkramp

3

Вы можете использовать этот синтаксис:

$$ text1

я использовал это раньше. Оценка приходит как в:

$ ($ text1)

0

Давайте рассмотрим следующий пример:

$construction_no = 5; 
$construction_5 = 'Door'; 

$var_name = 'construction_'.$construction_no; 
$var_value = ${$var_name}; 
echo $var_value; //Door 

Объектно-ориентированный подход

$var_value = $this->{$var_name}; 
echo $var_value; //Door