У меня есть сайт PHP, который использует языковые системы на основе метода «define». Например:
define("_question_1", "How old are you?"); define("_question_2", "Question 2?"); define("_question_3", "Question 3?"); .... define("_question_10", "Question 10?");
У меня есть 5-10 вопросов, которые мне нужно задать. И мне нужно выбрать вопрос, который я хочу задать. Поэтому я делаю запрос к моей БД. Что-то вроде:
SELECT q_title FROM questions_db WHERE id=3 OR id=10;
База данных возвращает два значения TEXT (!):
_question_3, _question_10
Кого я сохраняю:
$a = _question_3; $b = _question_10;
Следующее, что мне нужно, это показать текст описания, описанного ранее. Когда я использую _question_3 как VARIABLE, он работает следующим образом:
echo ""._question_3.""; //returns "Question 3?"
Но у меня есть только _question_3 как значение TEXT, и оно работает следующим образом:
echo "".$a.""; //returns "_question_3"
ВОПРОС: Как преобразовать текстовое значение в переменную PHP и сделать что-то вроде?
define("_question_3", "Question 3?"); $a = _question_3; //text value //do something with $a.... echo "".$a.""; //returns "Question 3?"
Спасибо за помощь. PS Пожалуйста, измените название, если оно не понятно для понимания.
Просто используйте constant()
чтобы использовать значение переменной как константу, например
echo constant($a);
В PHP вы можете использовать переменные переменные – имена динамических переменных.
$a = '_question_3'; $b = 'Question 3?'; $$a = $b; echo $b; // prints "Question 3?" echo $_question_3; // prints "Question 3?"
Но это нехорошее решение. Старайтесь не использовать имена динамических переменных.
Может ли быть более подходящим для вас ассоциативный массив?
$questions = []; // Creating an empty array $questions['_question_3']['question'] = 'Question 3?'; // Storing a question $questions['_question_3']['answers'] = [ // Adding answers 'Answer 1', 'Answer 2', 'Answer 3' ];
Или объявите класс Question
и создайте его экземпляры.
class Question { public $Question; public $Answers; __construct($question, $answers) { $this->Question = $question; $this->Answers = $answers; } } $q1 = new Question('Question 1?', ['Answer 1', 'Answer 2', 'Answer 3']);
Попробуйте константу (), она возвращает значение константы, например:
var_dump(constant('YourConstantNameHere'));
или с переменными
var_dump(constant($a));