3v4l.org

run code in 300+ PHP versions simultaneously
<?php error_reporting(-1); abstract class Question { public $text; // текст вопроса public $points = 5; // число баллов, по умолчанию 5 public $hint; // подсказка abstract function checkQuestionAndAnswer($answer); } class ChoiceQuestion extends Question { public $options; // варианты ответа public $correctOption; // правильный вариант public function checkQuestionAndAnswer($answer) { if ($this->correctOption == $answer) { return true; } else { return false; } } } class NumericQuestion extends Question { public $correctAnswer; // правильный ответ //public $deviation; // допустимая погрешность public function checkQuestionAndAnswer($answer) { if ($this->correctAnswer == $answer) { return true; } else { return false; } } } // Функция, создающая массив с вопросами: function createQuestions() { // Создаем пустой массив $questions = []; // Вопрос 1 $q1 = new ChoiceQuestion; $q1->text = "Какая планета располагается четвертой по счету от Солнца?"; $q1->points = 10; // 10 баллов за ответ $q1->options = array('a' => 'Венера', 'b' => 'Марс', 'c' => 'Юпитер', 'd' => 'Меркурий'); // Варианты ответа $q1->correctOption = 'b'; // Правильный ответ $q1->hint = 'Сникерс'; // Подсказка $questions[] = $q1; // Вопрос 2 $q2 = new ChoiceQuestion; $q2->text = 'Какой город является столицей Великобритании?'; $q2->points = 5; $q2->options = array('a' => 'Париж', 'b' => 'Москва', 'c' => 'Нью-Йорк', 'd' => 'Лондон'); $q2->correctOption = 'd'; $q2->hint = 'London is the capital of Great Britain'; // Подсказка $questions[] = $q2; // Вопрос 3 $q3 = new ChoiceQuestion; $q3->text = 'Кто придумал теорию относительности?'; $q3->points = 30; $q3->options = array('a' => 'Джон Леннон', 'b' => 'Джим Моррисон', 'c' => 'Альберт Эйнштейн', 'd' => 'Исаак Ньютон'); $q3->correctOption = 'c'; $q3->hint = 'Какой-то еврей... Подождите... Ох, нет...'; // Подсказка $questions[] = $q3; // Вопрос 4 - с выбором цифры $q4 = new NumericQuestion; $q4->text = 'Напишите число Пи до тысячных или хотя бы сотых.'; $q4->points = 30; $q4->correctAnswer = 3.14; $q4->hint = 'Это 3,14здец какой-то...'; // Подсказка $questions[] = $q4; return $questions; } function checkAnswers($questions, $answers) { if (count($questions) != count($answers)) { die("Число ответов и вопросов не совпадает\n"); } $number = 0; $pointsTotal = 0; // сколько набрано баллов $pointsMax = 0; // сколько можно набрать баллов при всех правильных ответах $correctAnswers = 0; // сколько отвечено верно $totalQuestions = count($questions); // Сколько всего вопросов // Если ответ из массива $answers и правильный ответ для соответствующего вопроса совпадают - плюсуются $correctAnswers, $pointsTotal for ($i = 0; $i < count($questions); $i++) { $number = $i + 1; $pointsMax += $questions[$i]->points; if ($questions[$i]->checkQuestionAndAnswer($answers[$i]) == true) { echo "Ответ на вопрос {$number} правильный\n\n"; $correctAnswers++; $pointsTotal += $questions[$i]->points; } else { echo "Ответ на вопрос {$number} НЕправильный\n Подсказка: {$questions[$i]->hint}\n\n"; } } echo "Всего набрано баллов $pointsTotal из $pointsMax.\n Всего правильных ответов: $correctAnswers.\n Всего было вопросов: $totalQuestions\n"; } function printQuestions($questions) { $number = 1; // номер вопроса foreach ($questions as $question) { echo "\n{$number}. {$question->text}\n\n"; if (isset($question->options)) { echo "Варианты ответов:\n"; foreach ($question->options as $letter => $answer) { echo " {$letter}. {$answer}\n"; } } $number++; } } $questions = createQuestions(); $answers = array('b', 'd', 'a', 1); printQuestions($questions); checkAnswers($questions, $answers);

preferences:
27.1 ms | 404 KiB | 5 Q