Notice: Trying to access array offset on value of type null
Сегодня запустил на своем пк один проект, который был создан 7.1 версии php. У меня стоит 7.4 и выдаёт напоминалку на экране:
Notice: Trying to access array offset on value of type null
Ссылкой на эту строку в коде:
if(file_exists('../app/controllers/' . ucwords($url[0]). '.php'))
Как изменить код, да бы убрать эту ошибку
Вот код целиком из файла:
<?php
class Core {
protected $currentController = 'Pages';
protected $currentMethod = 'index';
protected $params = [];
public function __construct(){
$url = $this->getUrl();
if(file_exists('../app/controllers/' . ucwords($url[0]). '.php')){
$this->currentController = ucwords($url[0]);
unset($url[0]);
}
require_once '../app/controllers/'. $this->currentController . '.php';
$this->currentController = new $this->currentController;
if(isset($url[1])){
if(method_exists($this->currentController, $url[1])){
$this->currentMethod = $url[1];
unset($url[1]);
}
}
$this->params = $url ? array_values($url) : [];
call_user_func_array([$this->currentController, $this->currentMethod], $this->params);
}
public function getUrl(){
if(isset($_GET['url'])){
$url = rtrim($_GET['url'], '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
$url = explode('/', $url);
return $url;
}
}
}
Ответы (1 шт):
Автор решения: Сергей Мишин
→ Ссылка
Ошибка говорит о том, что переменная $url у вас null. Значит нужно проверить этот момент. Например создать метод с проверкой и опираться на него:
public function stringIsEmptyOrNull($string) {
// да, тут можно использовать метод "empty()", но как мне кажется это не совсем то
return $string === '' || $string === null;
}
и дальше использовать:
public function __construct(){
// ...
$url = $this->getUrl();
if ($this->stringIsEmptyOrNull($url))
throw new Exception('url пустой, дядя!');
// ...
}