我开始开发一些比以前更复杂的东西,并且我想“按照书”来做,并且我已经读过,应该避免通知,即使它们不影响可用性。
所以我有一个检查URL并将其分成多个部分的函数。然后我用它来生成页面,但由于没有足够的部分,我在首页上收到通知。
这里有一些代码可以看到我在说什么:
$slug = getRightURL();
在getRightURL()
我有:
$curURL = $_SERVER['REQUEST_URI'];
$URL = explode('/', $curURL);
return $URL[2];
因此,当网址只是http://example.com/
时,该函数会发出通知;
我正在考虑添加这个:
if(count($URL) > 1) return $URL[1];
但有更好的方法吗?
答案 0 :(得分:2)
由于PHP数组实际上并不是数组(从0到长度为1的索引),所以只计数并不总是有效,但映射的地方可以包含所有未排序的字符串和数字作为索引。
要查明特定索引是否存在,请使用isset()。
if(isset($URL[2])) {
return $URL[2];
}
else {
return '';
}
您还可以使用三元运算符缩短它,如下所示:
return (isset($URL[2]) ? $URL[2] : '');
答案 1 :(得分:1)
如果没有看到getRightURL()
应返回的确切规格,这很难回答,但如果它是解析后的网址的最后一部分,您可以使用:
$URL = explode('/', $curURL);
return last($URL);
你应该调查parse_url
来解析你的网址。这将比解析爆炸提供更可靠的结果:
$URL = parse_url($curURL);
return $URL['path'];
答案 2 :(得分:1)
在请求的uri上使用explode()
之前,请尝试稍微清理字符串并添加一些错误检查。我想到了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])) {
...
}