Приветствую всех. Учусь в нетологии, отправила задание на проверку, завернули, пишут исправьте, ответ преподавателя прилагаю: "Отлично, что есть пояснения, что именно надо ввести. При вводе данных код не всегда ведет себя корректно, исправьте" <?php echo "Введите первое число:\n"; do { $a = trim(fgets(STDIN)); if (ctype_digit($a) === false) { fwrite(STDERR, "Введите, пожалуйста, число\n"); } } while (ctype_digit($a) === false); echo "Введите второе число:\n"; do { $b = trim(fgets(STDIN)); if ((int)$b === 0) { fwrite(STDERR, "Делить на 0 нельзя\n"); $b = trim(fgets(STDIN)); } if (ctype_digit($b) === false) { fwrite(STDERR, "Введите, пожалуйста, число\n"); } } while ((int)$b === 0 || ctype_digit($b) === false); fwrite(STDOUT, "Результат вычисления: " . $a/$b); При заданных цифрах 3,4, выводит следующее: php main.php Введите первое число: 3 Введите второе число: 4 Результат вычисления: 0.75 Помогите пожалуйста в решении задания, не пойму что хотят от меня
1) научитесь оформлять код на форуме, тырка </> для кого? 2) дробные и отрицательные числа почему-то не считаются числами )
digit - цифра number - число numeric - числовой is_numeric() --- Добавлено --- почаще читайте документацию на php.net. там масса полезных примеров и частных случаев, а также ссылок "смотри также"
Предлагаю следующие улучшения для данного кода: 1. Использовать функцию intval() вместо (int) для преобразования строки в целое число. 2. Вынести проверку на делимое равное 0 в отдельную функцию для улучшения читаемости кода. 3. Использовать функцию is_numeric() вместо ctype_digit() для проверки вводимых числовых значений. 4. Разделить код на функции для повышения модульности и упрощения чтения. Вот улучшенный код: PHP: <?php function getInput($message) { fwrite(STDOUT, $message . "\n"); $input = trim(fgets(STDIN)); return $input; } function isDivisorZero($divisor) { return intval($divisor) === 0; } function isValidNumber($number) { return is_numeric($number); } $a = ''; $b = ''; do { $a = getInput("Введите первое число:"); if (!isValidNumber($a)) { fwrite(STDERR, "Введите, пожалуйста, число\n"); } } while (!isValidNumber($a)); do { $b = getInput("Введите второе число:"); if (isDivisorZero($b)) { fwrite(STDERR, "Делить на 0 нельзя\n"); continue; } if (!isValidNumber($b)) { fwrite(STDERR, "Введите, пожалуйста, число\n"); } } while (isDivisorZero($b) || !isValidNumber($b)); $result = intval($a) / intval($b); fwrite(STDOUT, "Результат вычисления: " . $result); Этот улучшенный код использует функции для повышения читаемости и модульности, а также проводит проверку делителя на равенство 0 в отдельной функции.
Вот, я погуглил за Вас: Функция intval() в PHP является улучшенной версией приведения типа int. Она имеет следующие преимущества перед стандартным приведением типа int: 1. Обработка ошибок: intval() возвращает значение 0 в случае неудачи, вместо возникновения ошибки. Таким образом, она более гибкая и надежная, когда речь идет о приведении типа. 2. Учёт системы счисления: intval() позволяет указывать систему счисления при приведении строковых значений. Например, можно указать, что строка "10" должна быть приведена к числу 10 в двоичной системе счисления. 3. Приведение пустых значений: intval() по умолчанию возвращает 0 при попытке привести пустую строку или пустое значение к числу. Это полезно для обработки пользовательского ввода или данных из базы данных, которые могут быть пустыми. 4. Использование дополнительных параметров: intval() принимает дополнительные параметры, такие как указание минимальной и максимальной длины возвращаемого значения. Это может быть полезно для более точного контроля над результатом приведения типов. В общем, функция intval() предоставляет больше возможностей и гибкости при работе с приведением типов int в PHP. Она может быть предпочтительнее использования простого приведения типа int в некоторых ситуациях.
Спасибо большое, но какое отношение это имеет к текущему контексту? когда (int) при преобразовании из строки вернет ошибку? тут, вроде, это не актуально тут гугл сломался. Пустое это какое? '' или null? в обоих случаях это поведение одинаковое - преобразование к нулю это какое-то недокументированное поведение? А ещё в документации php.net в разделе преобразования типов в первую очередь говорится о конструкции языка (int) и потом упоминается об intval, т.е. как минимум это не хуже, а в производительности будет получше, т.к. это конструкция языка. Дополню, что говорит chatGpt с чем я в целом согласен - с int более читаемый код и быстрее. intval использовать когда нужна его функциональность. Потому в текущем контексте (int) -> в intval не улучшение. К улучшенным циклам тоже есть вопросы)
composer require symfony/console PHP: $app = new Symfony\Component\Console\Application; $app -> add( new App\Console\Test ); $app -> run(); PHP: <?php declare ( strict_types = 1 ); namespace App\Console; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; class Test extends Command { protected static $defaultName = 'test:first'; private SymfonyStyle $io; public function getName(): string { return 'Test'; } protected function configure() { $this -> setDescription( '1...' ) -> setHelp( '2...' ); } protected function execute( InputInterface $input, OutputInterface $output ) { $this -> io = new SymfonyStyle( $input, $output ); $res = $this -> io -> ask( 'Напиши че - нибудь' ); $this -> io -> writeln( '-----' . $res ); return Command :: SUCCESS; } } php console test