<?php
class Question
{
    public $text;           // текст вопроса
    public $points = 5;     // число баллов, по умолчанию 5
    public $answers;        // варианты ответов
    public $correctAnswer;  // правильный ответ
    public $help;	    // подсказка в случае неправильного ответа
}
 
// Функция, создающая массив с вопросами:
function createQuestions()
{
    // Создаем пустой массив
    $questions = [];
 
    // Создаем и заполняем первый объект
    $q = new Question;
    $q->text = "Познаю ли Я ООП?";
    $q->points = 1;
    $q->answers = array('a'=>'Да', 'b' => 'Не знаю', 'c' => 'Все зависит от меня самого', 'd' => 'Нет');
    $q->correctAnswer = 'c';
    $q->help = "Всему можно научиться, если постоянно прилагать усилия.";
    // Кладем вопрос в массив
    $questions[] = $q;
 
    // Создаем второй объект
    $q = new Question;
    $q->text = "Оп - няша?";
    $q->points = 10;
    $q->answers = array('a' => 'Да', 'b' => 'Определенно', 'c' => 'Он еще и умняша', 'd' => 'Все ответы верны');
    $q->correctAnswer = 'd';
    $q->help = "Оп не только няша, но он еще и очень мудр.";
    // Кладем вопрос в массив
    $questions[] = $q;
 
    // Создаем третий объект
    $q = new Question;
    $q->text = "Какой город является столицей России?";
    $q->points = 100;
    $q->answers = array('a' => 'Киев', 'b' => 'Санкт-Петербург', 'c' => 'Лондон', 'd' => 'Москва');
    $q->correctAnswer = 'd';
    $q->help = "В этот город также большевики перенесли столицу после революции.";
    // Кладем вопрос в массив
    $questions[] = $q;
 
    return $questions;
}

function printQuestions($questions)
{
    $number = 1; // номер вопроса

    foreach ($questions as $question) {
        echo "{$number}. {$question->text}\n\n";

        echo "Варианты ответов:\n";

        foreach ($question->answers as $letter => $answer) {
            echo "  {$letter}. {$answer}\n";
        }

        $number++; 
    }
}

function checkAnswers($questions, $answers)
{
    // Проверим, что число ответов равно числу вопросов (защищаемся от ошибки)
    if (count($questions) != count($answers)) {
        die("Число ответов и вопросов не совпадает\n");
    }

    $pointsTotal = 0; // сколько набрано баллов

    // сколько можно набрать баллов при всех правильных ответах
    $pointsMax = 0;  
    // сколько отвечено верно
    $correctAnswers = 0; 

    $totalQuestions = count($questions); // Сколько всего вопросов

    // Цикл для обхода вопросов и ответов
    for ($i = 0; $i < count($questions); $i++) {
        $question = $questions[$i]; // Текущий вопрос
        $answer = $answers[$i]; // текущий ответ

        // Считаем максимальную сумму баллов
        $pointsMax += $question->points;

        // Проверяем ответ
        if ($answer == $question->correctAnswer) {
            // Добавляем баллы
            $correctAnswers ++;
            $pointsTotal += $question->points;
        } else {
            // Неправильный ответ
            $number = $i + 1;
            echo "Неправильный ответ на вопрос №{$number} ({$question->text})\n";
            //Выводим подсказку
            echo "Подсказка: {$question->help} (Правильный ответ:{$question->correctAnswer})"."\n";
            
        }
    }

    // Выведем итог
    echo "Правильных ответов: {$correctAnswers} из {$totalQuestions}, баллов набрано: $pointsTotal из $pointsMax\n";
}

$questions = createQuestions();
printQuestions($questions);
$answers = array('a', 'z', 'd');
checkAnswers($questions, $answers);