Друзья, у меня проблема которую не получается победить. Обновил версию PHP у себя с 7.2 до 8.2. После этого часть кода начало вызывать нотисы и ошибки. Начал адаптировать код под 8.2. По большей части все получается. Но столкнулся ошибкой которую не смог победить, и не нашел инфу в интернтете как это сделать. Есть такой метод в классе: PHP: public function match($regex, $userAgent = null) { $match = (bool) preg_match(sprintf('#%s#is', $regex), (false === empty($userAgent) ? $userAgent : $this->userAgent), $matches); if ($match) { $this->matchingRegex = $regex; $this->matchesArray = $matches; } return $match; } Постоянно идет ругань на строчку номер 3. Ошибка вот такая: Deprecated: preg_match(): Passing null to parameter #2 ($subject) of type string is deprecated in Уже голову сломал в чем ошибка. На строчке 3 располагается вот эта строчка метода: $match = (bool) preg_match(sprintf('#%s#is', $regex), (false === empty($userAgent) ? $userAgent : $this->userAgent), $matches); Не получается своим умом дойти как ее переписать чтобы все работало и не вызывало ошибок. Прошу помощи. p.s.: на PHP 7.2 все работает идеально, а вот с PHP 8.2 - проблема.
Вероятно вот это выражение во втором параметре не имеет определенного значения: (false===empty($userAgent) ? $userAgent:$this->userAgent) на него и ругается.
Попробуй вместо public function match($regex, $userAgent = null) заменить на public function match($regex, $userAgent = '') а в preg_math(sprintf('#%s#is',$regex),(false===($userAgent == '') ? $userAgent:$this->userAgent),$matches);
Проверьте $this->userAgent PHP: // вместо false === empty($userAgent) ? $userAgent : $this->userAgent // можно применить $userAgent ?: $this->userAgent
Друзья, всем спасибо, буду пробовать. Какая то жесть с этим PHP 8.2. Такое впечатление что скоро нас ждет глобальная переработка PHP и часто старого привычного перестанет работать совсем.
Разработку нужно вести с включенными сообщениями об ошибках PHP: error_reporting(E_ALL); ini_set("display_errors", true); и ловить всякую бяку сразу, а не спустя годы.
@don.bidon а то что в вопросе ТС пишет сообщение ошибки, что null устарело для передачи строкой приведением типа - этого недостаточно? --- Добавлено --- @Sail то есть мы null проверяем на булев - браво, а ещё если строгую типизацию замостырим, то у нас нуллейбл строка приводится к булеву, вместо того, чтобы в регулярке обозначить начало и конец строки паттерна
там false с результатом конструкции empty сверяется - нахрена ? не ко мне. Наверно имелось ввиду ! empty ( ... ) А null возвращается с userAgent, где ее присвоение протухло, либо нет. Поэтому из класса берется что-то подобное по дефолту: public $userAgent = null;
Вот такое упрощение должно дать нужный результат: PHP: $userAgent ?? $this->userAgent НО! Надо быть уверенным, что в $this->userAgent не-null значение по умолчанию.
Первый совет уже охаяли раскритиковали (#7), а на второй - не обратили внимания.. или уже воспользовались и молчат (#4)