Я начал разрабатывать что-то более сложное, чем то, что делал раньше, и я хочу сделать это «по книге», и я прочитал, что следует избегать уведомлений, даже если они не влияют на удобство использования.
Так что у меня есть функция, которая проверяет URL и разбивает его на несколько частей. Затем я использую его для генерации страниц, но на первой странице я получаю уведомление, так как не хватает частей.
Вот код, чтобы понять, о чем я говорю:
$slug = getRightURL();
В getRightURL()
Я имею:
$curURL = $_SERVER['REQUEST_URI'];
$URL = explode('/', $curURL);
return $URL[2];
Поэтому, когда URL просто http://example.com/
функция выдает уведомление;
Я думал о добавлении этого:
if(count($URL) > 1) return $URL[1];
Но есть ли лучший способ сделать это?
Просто подсчет не всегда помогает, так как PHP-массивы на самом деле не являются массивами (что-то индексировано от 0 до length-1), а отображают, где вы можете иметь все виды непоследовательных строк и чисел в качестве индекса.
Чтобы узнать, существует ли определенный индекс, используйте isset ().
if(isset($URL[2])) {
return $URL[2];
}
else {
return '';
}
Вы также можете сократить это с помощью троичного оператора следующим образом:
return (isset($URL[2]) ? $URL[2] : '');
Это трудно ответить, не видя точных спецификаций того, что ваши getRightURL()
должен вернуться, но если это последний раздел проанализированного URL, вы можете использовать:
$URL = explode('/', $curURL);
return last($URL);
И вы должны посмотреть в parse_url
проанализировать ваш URL. Это даст вам более надежные результаты, чем разбор:
$URL = parse_url($curURL);
return $URL['path'];
Перед использованием explode()
на запрашиваемом URI попробуйте немного очистить строку и добавить немного проверки ошибок. И то и другое trim()
а также isset()
приходит на ум.
// If the uri were /controller/view or /controller/view/...
$uri = trim($_SERVER['REQUEST_URI'], "/");
// trim with a character mask of "/" will clean up your uri leaving
// controller/view
$uri = explode("/", $uri);
// As a side note, calling explode on an empty string will return an array
// containing an index (key) of 1 and a value of "" (empty string). This is
// important as you don't have to implicitly check if $uri is an array with
// is_array() or fear a warning appearing when passing explode an empty string
// (i.e. explode("/", "") results in array([1] => ))
// Check that you did need explode and that the requested index exists...
if(isset($uri[2])) {
...
}
Рекомендации: