<?php
// Абстрактный класс
abstract class Question
{
public $text;
abstract function checkAnswer($answer);
abstract function printQuestions();
}
// Вопрос с выбором вариантов
class ChoiceQuestion extends Question
{
public $options; // варианты ответа
public $correntOption; // правильный вариант
public function checkAnswer($answer)
{
if ($this->correntOption == $answer) {
return true;
} else {
return false;
}
}
public function printQuestions()
{
# Вывод вопроса
echo $this->text . PHP_EOL;
foreach ($this->options as $letter => $option) {
echo "{$letter}. {$option}" . PHP_EOL;
}
echo '' . PHP_EOL;
}
}
// Вопрос с вводом числа
class NumericQuestion extends Question
{
public $answer; // ответ
public $deviation; // допустмая погрешность
public function checkAnswer($myAnswer)
{
if ($this->deviation >= (abs($myAnswer - $this->answer))) { return true;
} else {
return false;
}
}
public function printQuestions()
{
echo $this->text . PHP_EOL;
echo '' . PHP_EOL;
}
}
# Вопрос с выбором ответа
$question1 = new ChoiceQuestion;
$question1->text = "Кто написал Муму ?";
$question1->options = ['a' => 'Пушкин', 'b' => 'Чехов', 'd' => 'Тургенев', 'd' => 'Достоевский'];
$question1->correntOption = 'd';
# Вопрос с выбором ответа
$question2 = new ChoiceQuestion;
$question2->text = "Кто первый ступил на луну ?";
$question2->options = ['a' => 'наши', 'b' => 'не наши'];
$question2->correntOption = 'b';
#Числовой вопрос
$question3 = new NumericQuestion;
$question3->text = 'Чему равна скорость света в км/c';
$question3->answer = 299792;
$question3->deviation = 10000;
#Числовой вопрос
$question4 = new NumericQuestion;
$question4->text = 'Чему равно число Пи';
$question4->answer = 3.14;
$question4->deviation = 0.002;
$questions = [$question1, $question2, $question3, $question4];
#Вывод вопросов и ответов
$number = 1;
foreach ($questions as $question) {
echo "{$number}) ";
$question->printQuestions();
$number++;
}
# Проверка ответов на вопросы
$answers = ['a', 'g', 299999, 0];
echo "Проверяем введенные ответы" . PHP_EOL . PHP_EOL;
$n = 0;
foreach ($questions as $question) {
echo ($n + 1) . ') ';
if ($question->checkAnswer($answers[$n])) {
echo 'Верно' . PHP_EOL;
} else {
echo 'Не верно' . PHP_EOL;
}
$n++;
}