0

我知道您应该定义 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])?我能看到的唯一区别是引用的单词“Sarasota”,而不是未引用的数字 5。

4

4 回答 4

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];
于 2013-01-28T17:30:13.967 回答
3

写入默认值的常用方法是使用三元运算符? :,如下所示:

$site = isset($_GET["site"]) ? $_GET["site"] : null; // null is the default value

对于数组,我建议使用count函数而不是isset. 这加强了读者对您正在处理数组的理解。

isset在关联数组(如$_GET)中使用了更多注释,因此您可能期望其他不一定是数字的键。

于 2013-01-28T17:31:16.083 回答
2
if ($_GET["site"])

一定是

if (isset($_GET["site"]))

对于 $title 的东西,你应该使用 isset:

if (isset($title[1])) [...]
于 2013-01-28T17:30:45.007 回答
1

您还可以使用包含 isset 错误处理的解决方案,方法是使用 !empty

if(!empty($_GET['site']))
于 2013-01-28T17:31:57.223 回答