回复一个不存在的变量是有效的PHP吗?

时间:2011-03-04 01:27:28

标签: php syntax nav

我在各个页面中使用此代码来创建唯一标题和活动标签。

<?php 
    $title = "Blanktree Design"; 
    $home = "class=\"active\"";
    include "header.php"; 
?>

我在header.php中使用此代码来执行这些差异。

<title><?php echo $title; ?></title>

<ul id="nav">
   <li <?php echo $home ?>><span>begin</span><a href="/">home</a></li>
   <li <?php echo $about ?>><span>curious?</span><a href="/about">about</a></li>
   <li <?php echo $contact ?>><span>locate</span><a href="/contact">contact</a></li>
</ul>

我最好奇的是,因为我是PHP的新手......是否只是回显一个不存在的变量是有效的? 我的意思是......它有效并且没有错误。但我只是想知道这是不是很糟糕的编程。

提前致谢。

分辨

在一天结束时,所有讨论都已完成,这是我在特定情况下发现最有意义的内容:

<?php 
    $title = "Blanktree Design"; 
    $home = "class=\"active\"";
    $about = $contact = "";
    include "header.php";
?>

调用变量与以前相同:

<ul id="nav">
   <li <?php echo $home ?>><span>begin</span><a href="/">home</a></li>
   <li <?php echo $about ?>><span>curious?</span><a href="/about">about</a></li>
   <li <?php echo $contact ?>><span>locate</span><a href="/contact">contact</a></li>
</ul>

3 个答案:

答案 0 :(得分:4)

更好的编程实践是检查它是否先设置好。如

if (isset($variable))
  echo $variable;

答案 1 :(得分:4)

是的,回复(以及任何其他用法)不存在的变量总是很糟糕的编程 它实际上是错误 - 你只是因为错误的PHP设置而没有看到它。

error_reporting(E_ALL);
脚本顶部的

将显示这些错误。

尽管PHP几乎不允许使用未定义的变量,但良好的编程习惯在代码使用之前定义代码中的每个变量
它将让您避免许多错误和意外行为甚至严重的漏洞。

然而,大多数人认为这个问题是错误的,认为应该在使用之前检查变量是否存在。但是稍微考虑一下这个话题,你会发现它非常荒谬 - 似乎这种检查的唯一目的是堵塞错误信息。那么,语言开发人员发明这样的警告只是为了打扰程序员进行不必要的验证?

当然不是。
这个警告的真实意图(正如任何其他警告一样)是让程序员知道出现了问题 这真的很容易:PHP只是告诉你“你不忘记给这个变量分配一些值吗,兄弟?看来你会用它,所以,你期待它的价值,但是没有' t。只是为了让你知道。“ 但是通过使用isset()我们只是禁止这个警告而已。对自己造成伤害。

此外,通过初始化变量,可以确定变量存在和它的值。

一个小例子:

<?
while ($i < 10) {
  echo $i." ";
}
echo "<br>";
while ($i < 10) {
  echo $i." ";
}
?>

打印此代码段的行数是多少?只有一个。

因此,每个脚本变量应在使用前初始化。

特殊问题是 outside variables 程序员无法控制它的行为。有时外部变量的存在是应用逻辑的一种情况。例如:

if (isset($_GET['id'])) {
  //displays particular article
} else {
  //displays list of articles
}

允许这样检查。
但应严格限制原始外部变量的使用 例如,如果您要使用先前输入的值填充表单字段,则建议创建另一个变量,例如$ FORM,并使用从原始外部变量中正确准备的值初始化其项目。

答案 2 :(得分:2)

它会发出警告,请参阅PHP: printing undefined variables without warning,但您是否看到它取决于您的错误报告级别。