Laravel Нечисловое значение, встречающееся в функциях - PullRequest
0 голосов
/ 10 октября 2018

В чем причина следующей ошибки в коде?Первый раз запускается без проблем, но во второй раз возникает ошибка «Обнаружено нечисловое значение»:

 public function checkName(string $name, string $path, string $extension, int $num)
    {
        if (Storage::exists("$path/$name"))
        {
            $withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $name);

            if ($num > 1)
                $withoutExt = str_replace('_'.$num-1, '_'.$num, $withoutExt);
            else
                $withoutExt = $withoutExt . '_'.$num;

            $newName = "$withoutExt.$extension";

            if (Storage::exists("$path/$newName")) {
                return $this->checkName($newName, $path, $extension, $num+1);
            }
            else
                return $newName;
        }

        return $name;
    }

$fileNameSave = (new Attachment)->checkName($fileName, $filePath, $file->getClientOriginalExtension(), 1);

exception: "ErrorException"
line: 84
message: "A non-numeric value encountered"

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Это связано с тем, что здесь сцепление имеет приоритет:

'_'.$num-1

Чтобы исправить проблему, просто заключите вычитание в скобки:

str_replace('_'.($num-1), '_'.$num, $withoutExt);

0 голосов
/ 10 октября 2018

Заменить

str_replace('_'.$num-1, '_'.$num, $withoutExt);

на

str_replace('_'.($num-1), '_'.$num, $withoutExt);

Ваш код пытается вычесть _1 - 1, это было ошибкой.

...