Я работаю над проектом MVC, и я со своей стороны, чтобы получить значения URL, чтобы получить каждый параметр, я использую array_shift(), и в документации сказано следующее:
Возвращает сдвинутое значение или NULL, если массив пуст или не является массивом.
В моем коде у меня есть следующие строки:
$arrParams = isset($_GET["params"]) ? explode("/", $_GET["params"]) : "";
$controller = array_shift($arrParams);
$action = array_shift($arrParams);
$params = array_shift($arrParams);
Если я mvc-project.local
доступ к mvc-project.local
и я не передаю какой-либо параметр URL-адресу, появится следующее сообщение:
Предупреждение: array_shift() ожидает, что параметр 1 будет массивом, строка указана в строке... в строке 12
В чем проблема?
Попробуй это -
$arrParams = isset($_GET["params"]) ? explode("/", $_GET["params"]) : array();
Или
(array) $arrParams = isset($_GET["params"]) ? explode("/", $_GET["params"]) : "";
Или
$controller = array_shift((array)$arrParams);
$action = array_shift((array)$arrParams);
$params = array_shift((array)$arrParams);
Вы по $arrParams
в пустую строку, поэтому вы получаете предупреждение (обратите внимание, что не ошибка) об этом передается строка. Просто сделайте пустой массив:
$arrParams = isset($_GET["params"]) ? explode("/", $_GET["params"]) : array();
Или не очень хорошее решение - подавить предупреждение с помощью @
:
$controller = @array_shift($arrParams);
$action = @array_shift($arrParams);
$params = @array_shift($arrParams);