我知道您应该定义PHP变量,这样就不会使用未定义的变量阻塞错误日志,但我的日志仍然充满了不必要的信息。
例如......
[28-Jan-2013 16:45:42 UTC] PHP Notice: Undefined index: site in C:\Sites\FLCBranson.org\freedownloads.php on line 34
我的PHP代码已定义$site
,但我确实希望有覆盖它的选项...
// it's a good idea to define the variable first and then make changes as necessary (that way you don't fill up your logs with worthless errors)
$site = "flc";
// overrides the domain (useful for IP addresses)
if ($_GET["site"]) $site = $_GET["site"];
所以,我有很多这类问题。然后我有一堆这些讨厌的错误......
[28-Jan-2013 16:45:42 UTC] PHP Notice: Undefined offset: 3 in C:\Sites\FLCBranson.org\listseries.php on line 264
[28-Jan-2013 16:45:42 UTC] PHP Notice: Undefined offset: 4 in C:\Sites\FLCBranson.org\listseries.php on line 265
[28-Jan-2013 16:45:42 UTC] PHP Notice: Undefined offset: 5 in C:\Sites\FLCBranson.org\listseries.php on line 266
我有一个填充了各种内容的数组。如果其中一个插槽中有东西,那么我想用它做点什么......
// explode() takes a string of text ($item->title in this case) and creates an array comprised of parts of the text separated by the separator (- in this case)
$title = explode(" - ", $sermontitle);
// sets the sermon title variable
$sermontitle = $title[0];
if ($title[1]) $sermontitle = $sermontitle . " - " . $title[1];
if ($title[2]) $sermontitle = $sermontitle . "<br>" . $title[2];
if ($title[3]) $sermontitle = $sermontitle . " - " . $title[3];
if ($title[4]) $sermontitle = $sermontitle . " - " . $title[4];
if ($title[5]) $sermontitle = $sermontitle . " - " . $title[5];
那么,我做错了什么?我定义了我的变量。然后,如果满足某些条件,我只对变量进行更改。我认为这是做到这一点的合适方式。
编辑...
我发现了另一个奇怪的例子......
[28-Jan-2013 20:07:05 UTC] PHP Notice: Undefined variable: broadcast in C:\Sites\FLCBranson.org\flconlineservices.php on line 242
if (file_exists($golive) || ($broadcast == "live")
似乎还不够。我需要if (file_exists($golive) || (isset($broadcast) && $broadcast == "live"))
吗?这似乎是很多代码来进行简单的比较。
编辑2 ...
所以,我开始理解为什么isset()
是必需的,但这是我无法得到的。我有一些代码从数据库中提取信息,我有if ($row["Sarasota"])
,但错误日志没有显示任何内容。如果isset()
需要if ($title[5])
,为什么不要求{{1}}?我能看到的唯一区别是引用的单词“Sarasota”而不是不带引号的数字5。
答案 0 :(得分:3)
使用isset避免这些通知:
if (isset($title[1]) && $title[1]) $sermontitle = $sermontitle . " - " . $title[1];
if (isset($title[2]) && $title[2]) $sermontitle = $sermontitle . "<br>" . $title[2];
if (isset($title[3]) && $title[3]) $sermontitle = $sermontitle . " - " . $title[3];
if (isset($title[4]) && $title[4]) $sermontitle = $sermontitle . " - " . $title[4];
if (isset($title[5]) && $title[5]) $sermontitle = $sermontitle . " - " . $title[5];
答案 1 :(得分:3)
编写默认值的常用方法是使用三元运算符? :
,如下所示:
$site = isset($_GET["site"]) ? $_GET["site"] : null; // null is the default value
对于数组,我建议使用count
函数而不是isset
。这加强了读者对你正在处理阵列的理解。
isset
在关联数组中使用的注释更多(例如$_GET
),因此您可能希望其他键不一定是数字。
答案 2 :(得分:2)
if ($_GET["site"])
必须是
if (isset($_GET["site"]))
还有你应该使用的$ title标题:
if (isset($title[1])) [...]
答案 3 :(得分:1)
您还可以使用包含isset错误处理的解决方案,使用!empty
if(!empty($_GET['site']))