PHP - Как выйти из if - PullRequest
       42

PHP - Как выйти из if

0 голосов
/ 10 июля 2020

Мой код показывает ошибку в строке, прокомментированной ниже:

  • ErrorException Обнаружено нечисловое c значение

Входная переменная получает звездочку символ и проходит через мой if вместо остановки на первой итерации. Не могли бы вы помочь мне выяснить причину ошибки или указать команду для выхода, если после первой итерации if?

   $minute = '*';

    $pos1 = strpos($minute, '*');
    $pos2 = strpos($minute, ',');
    $pos3 = strpos($minute, '-');
    $pos4 = strpos($minute, '/');

    if (true == $pos1) {
        $operator = '*';
    } elseif (true == $pos2) {
        $operator = ',';
    } elseif (true == $pos3) {
        $operator = '-';
    } elseif (true == $pos4) {
        $operator = '/';
    } else {
        $minute_atual = Carbon::now->format('i');

        if ($minute < $minute_current) {
            $minute = 60 - ($minute_current - $minute); // The error message says it is on that line
            $operator = $ minute;
        } elseif ($minute_current == $minute) {
            $minute = '0';
            $operator = $minute;
        } else {
            $minute = $minute - $minute_current;
            $operator = $minute;
                        }
    }

Ответы [ 2 ]

0 голосов
/ 10 июля 2020
$minute = '*';

Это строка. И php не может применять к нему операции numeri c. Я не вижу, присваиваете ли вы ему значение numeri c перед вычитанием.

В основном вы пытаетесь сделать «число - (число - строка)». Возможно, вам не хватает какой-то части вашего logi c.

Также вам не нужно устанавливать приоритет над операциями, если они являются вычитанием или сложением.

60 - $minute_current - $minute

Дает вам тот же результат. Конечно, если $ minute является целым числом.

И также я настоятельно рекомендую избегать слабого сравнения, вместо этого используйте ===,! ==. Итак, вы точно знаете, что делаете

0 голосов
/ 10 июля 2020

strpos печально известна этой ошибкой.

Действительно

$minute = "*";
$pos1 = strpos($minute, '*');
var_dump($pos1); 
// 0 because this is the first (0th) character

, поэтому тест true == 0 не проходит

Используйте строгое неравенство $pos0 !== false вместо

Ссылка на функцию: https://www.php.net/manual/en/function.strpos См. Предупреждение в разделе «Возвращаемое значение».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...