Хорошая практика, связанная с пустыми массивами и уведомлениями

Я начал разрабатывать что-то более сложное, чем то, что делал раньше, и я хочу сделать это «по книге», и я прочитал, что следует избегать уведомлений, даже если они не влияют на удобство использования.

Так что у меня есть функция, которая проверяет 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];

Но есть ли лучший способ сделать это?

-1

Решение

Просто подсчет не всегда помогает, так как PHP-массивы на самом деле не являются массивами (что-то индексировано от 0 до length-1), а отображают, где вы можете иметь все виды непоследовательных строк и чисел в качестве индекса.

Чтобы узнать, существует ли определенный индекс, используйте isset ().

if(isset($URL[2])) {
return $URL[2];
}
else {
return '';
}

Вы также можете сократить это с помощью троичного оператора следующим образом:

return (isset($URL[2]) ? $URL[2] : '');
2

Другие решения

Это трудно ответить, не видя точных спецификаций того, что ваши getRightURL() должен вернуться, но если это последний раздел проанализированного URL, вы можете использовать:

$URL = explode('/', $curURL);
return last($URL);

И вы должны посмотреть в parse_url проанализировать ваш URL. Это даст вам более надежные результаты, чем разбор:

$URL = parse_url($curURL);
return $URL['path'];
1

Перед использованием 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])) {
...
}

Рекомендации:

trim()
isset()

1
По вопросам рекламы [email protected]