php 49 задание

1

есть функция

function sum($a, $b) {
    $result = false;

    if(!is_numeric($a)) {
        $result = "не число";
    } else if (!is_numeric($b)) {
        $result = "опять нe число";
    } else {
        $result = $a + $b;
    }
    return $result; 
}

echo sum(68, 148);

Зачем в ней писать $result = false; и что вообще это значит не могу разобраться!

php
mysql

6 ответов

3

$result = false; предназначен для проверки самой функции.

Если в echo sum (68, 148); напишете к примеру  ("string", 148), тогда функция выдаст что 'a' -это не число.

Или если вы поменяете местами значения к примеру: echo sum(148, "string"),
тогда выдаст что 'b' - не является числом.

3

Ничего и не изменится, но если захотите использовать эту функцию где-то в программе, как вы узнаете, что функция верно сработала или нет? Для этого и возвращают false, типа:

if(!sum($a, $b)) {
  // Если что-то пошло не так, сработает этот участок кода
  
  
} else {
  // Если не возвращает false функция sum, значит этот участок кода сработает
}
0

А мне все же из пояснений ничего не понятно.

Предположила, что $result = false; "защищает" от ошибок, которые мы могли не предусмотреть в условиях, но... Выполнила следующие проверки с $result = false и без: результат идентичен.

1. Задала функции sum одно входящее значение переменной: 

function sum($a, $b) {
$result = false;

if (!is_numeric($a)) {
$result = "a не является числом";
} else if (!is_numeric($b)) {
$result = "b не является числом";
} else {
$result = $a + $b;
}
return $result;
}

echo sum(6);

Ответ: Fatal error: Uncaught ArgumentCountError: Too few arguments to function sum(), 1 passed in C:\xampp\htdocs\kinomonster\index.php on line 16 and exactly 2 expected in C:\xampp\htdocs\kinomonster\index.php:3 Stack trace: #0 C:\xampp\htdocs\kinomonster\index.php(16): sum(6) #1 {main} thrown in C:\xampp\htdocs\kinomonster\index.php on line 3

2. Задала слишком большие числа:

function sum($a, $b) {
$result = false;

if (!is_numeric($a)) {
$result = "a не является числом";
} else if (!is_numeric($b)) {
$result = "b не является числом";
} else {
$result = $a + $b;
}
return $result;
}

echo sum(61E+176, 61E+361);

Ответ: INF

Отсюда вопрос: так для чего нужна строка $result = false?

0

Евгения Иванова,

1. Ошибка:

Ответ: Fatal error: Uncaught ArgumentCountError: Too few arguments to function sum(), 1 passed in C:\xampp\htdocs\kinomonster\index.php on line 16 and exactly 2 expected in

Говорит эта ошибка о том, что функция должна принимать несколько аргументов на вход, вы подаете только один аргумент:

echo sum(6);

Поэтому показывается такая ошибка. Если один аргумент необязательный, тогда можно задать в функции значение по умолчанию в аргументе вот так:

function sum($a, $b = 123) {
...

Смотри здесь документацию по PHP, тритий пример:

https://www.php.net/manual/en/functions.arguments.php

2. Пример с inf

Для инфинитивов тоже есть функция проверки в php, смотри функцию is_infinite здесь:

https://www.php.net/manual/en/function.is-infinite.php

Возврат слишком большого число - это не совсем ошибка, а php сообщает, что вычисляется лишком большое число, которое не уместится в памяти. 

Отсюда вопрос: так для чего нужна строка $result = false?

По сути result уже не false (пример 2 с inf), так как переменной $result все же присваивается значение, даже если это число слишком большое. В иных случаях, $result будет false или ошибка вызова функции.

2

А разве нельзя осуществлять проверку без этой строки.Пробовал не писать ее ничего не измен лось вроде

3

Спасибо огромное за пояснение

Sign up or Log in to write an answer