<?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 'Верно' . PHP_EOL;
        } else {
            return 'Не верно' . PHP_EOL;
        }
    }
 
    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 'Верно' . PHP_EOL;
        } else {
            return 'Не верно' . PHP_EOL;
        }
    }
 
    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 = ['d', 'g', 299999, 3.142];
echo "Проверяем введенные ответы".PHP_EOL.PHP_EOL;
$n = 0;
foreach ($questions as $question) {
    echo ($n + 1) . ") ";
    echo $question->checkAnswer($answers[$n]);
    $n++;
}