3v4l.org

run code in 300+ PHP versions simultaneously
<?php abstract class Question { public $text; // текст вопроса public $points = 5; // число баллов, по умолчанию 5 public $hint; // подсказка } class ChoiceQuestion extends Question { public $options; // варианты ответа public $correctOption; // правильный вариант public 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->correctOption) { // Добавляем баллы $correctAnswers ++; $pointsTotal += $question->points; } else { // Неправильный ответ $number = $i + 1; echo "Неправильный ответ на вопрос №{$number} ({$question->text})\n"; echo "Подсказка: {$question->hint}\n"; } } // Выведем итог echo "Правильных ответов: {$correctAnswers} из {$totalQuestions}, баллов набрано: {$pointsTotal} из {$pointsMax}\n"; } } class NumericQuestion extends Question { public $correctAnswer; // правильный ответ //public $deviation; // допустимая погрешность public 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->hint}\n"; } } // Выведем итог echo "Правильных ответов: {$correctAnswers} из {$totalQuestions}, баллов набрано: {$pointsTotal} из {$pointsMax}\n"; } } // Функция, создающая массив с вопросами: 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 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); $questions[0]->checkAnswers($questions, $answers);
Output for 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
1. Какая планета располагается четвертой по счету от Солнца? Варианты ответов: a. Венера b. Марс c. Юпитер d. Меркурий 2. Какой город является столицей Великобритании? Варианты ответов: a. Париж b. Москва c. Нью-Йорк d. Лондон 3. Кто придумал теорию относительности? Варианты ответов: a. Джон Леннон b. Джим Моррисон c. Альберт Эйнштейн d. Исаак Ньютон 4. Напишите число Пи до тысячных или хотя бы сотых. Неправильный ответ на вопрос №3 (Кто придумал теорию относительности?) Подсказка: Какой-то еврей... Подождите... Ох, нет... Warning: Undefined property: NumericQuestion::$correctOption in /in/fd5qV on line 40 Неправильный ответ на вопрос №4 (Напишите число Пи до тысячных или хотя бы сотых.) Подсказка: Это 3,14здец какой-то... Правильных ответов: 2 из 4, баллов набрано: 15 из 75
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 1. Какая планета располагается четвертой по счету от Солнца? Варианты ответов: a. Венера b. Марс c. Юпитер d. Меркурий 2. Какой город является столицей Великобритании? Варианты ответов: a. Париж b. Москва c. Нью-Йорк d. Лондон 3. Кто придумал теорию относительности? Варианты ответов: a. Джон Леннон b. Джим Моррисон c. Альберт Эйнштейн d. Исаак Ньютон 4. Напишите число Пи до тысячных или хотя бы сотых. Неправильный ответ на вопрос №3 (Кто придумал теорию относительности?) Подсказка: Какой-то еврей... Подождите... Ох, нет... Warning: Undefined property: NumericQuestion::$correctOption in /in/fd5qV on line 40 Неправильный ответ на вопрос №4 (Напишите число Пи до тысячных или хотя бы сотых.) Подсказка: Это 3,14здец какой-то... Правильных ответов: 2 из 4, баллов набрано: 15 из 75
Output for 7.0.0 - 7.0.20, 7.1.0 - 7.1.25, 7.2.0 - 7.2.33, 7.3.0 - 7.3.31, 7.4.0 - 7.4.33
1. Какая планета располагается четвертой по счету от Солнца? Варианты ответов: a. Венера b. Марс c. Юпитер d. Меркурий 2. Какой город является столицей Великобритании? Варианты ответов: a. Париж b. Москва c. Нью-Йорк d. Лондон 3. Кто придумал теорию относительности? Варианты ответов: a. Джон Леннон b. Джим Моррисон c. Альберт Эйнштейн d. Исаак Ньютон 4. Напишите число Пи до тысячных или хотя бы сотых. Неправильный ответ на вопрос №3 (Кто придумал теорию относительности?) Подсказка: Какой-то еврей... Подождите... Ох, нет... Notice: Undefined property: NumericQuestion::$correctOption in /in/fd5qV on line 40 Неправильный ответ на вопрос №4 (Напишите число Пи до тысячных или хотя бы сотых.) Подсказка: Это 3,14здец какой-то... Правильных ответов: 2 из 4, баллов набрано: 15 из 75
Output for 7.3.32 - 7.3.33
1. Какая планета располагается четвертой по счету от Солнца? Варианты ответов: a. Венера b. Марс c. Юпитер d. Меркурий 2. Какой город является столицей Великобритании? Варианты ответов: a. Париж b. Москва c. Нью-Йорк d. Лондон 3. Кто придумал теорию относительности? Варианты ответов: a. Джон Леннон b. Джим Моррисон c. Альберт Эйнштейн d. Исаак Ньютон 4. Напишите число Пи до тысячных или хотя бы сотых. Неправильный ответ на вопрос №3 (Кто придумал теорию относительности?) Подсказка: Какой-то еврей... Подождите... Ох, нет... Неправильный ответ на вопрос №4 (Напишите число Пи до тысячных или хотя бы сотых.) Подсказка: Это 3,14здец какой-то... Правильных ответов: 2 из 4, баллов набрано: 15 из 75

preferences:
181.42 ms | 403 KiB | 181 Q