Приветствую всех.
Учусь в нетологии, отправила задание на проверку, завернули, пишут исправьте, ответ преподавателя прилагаю:
«Отлично, что есть пояснения, что именно надо ввести.
При вводе данных код не всегда ведет себя корректно, исправьте»<?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) { return $input; } function isDivisorZero($divisor) { } function isValidNumber($number) { } $a = »; $b = »; do { $a = getInput(«Введите первое число:»); if (!isValidNumber($a)) { } } while (!isValidNumber($a)); do { $b = getInput(«Введите второе число:»); if (isDivisorZero($b)) { continue; } if (!isValidNumber($b)) { } } while (isDivisorZero($b) || !isValidNumber($b));Этот улучшенный код использует функции для повышения читаемости и модульности, а также проводит проверку делителя на равенство 0 в отдельной функции.
чем intval лучше int?
Вот, я погуглил за Вас:
Функция 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