【问题标题】:Is it valid PHP to echo a non-existent variable?回显不存在的变量是否有效 PHP?
【发布时间】:2011-03-04 01:27:28
【问题描述】:

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

<?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>

【问题讨论】:

  • 你说的是$about$contact吗?
  • 开启错误报告。 Notice: Undefined variable: myvar。此外,还有更好的方法来确定活动页面。
  • 你能链接到一个更好的例子或给出一个更好的例子吗?这是我能想到的最简单的事情,但话又说回来......我是 PHP 新手。

标签: php syntax nav


【解决方案1】:

是的,回显(和任何其他用法)不存在的变量总是很糟糕的编程。
它实际上是错误的 - 由于错误的 PHP 设置,您只是看不到它。

error_reporting(E_ALL);

脚本顶部会显示这些错误。

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

然而,大多数人都误解了这个问题,认为在使用之前应该检查变量是否存在。但是稍微考虑一下这个话题,你会发现它很荒谬——似乎这种检查的唯一目的是堵住一条错误消息。那么,语言开发人员发明这样的警告只是为了给程序员不必要的验证带来麻烦?

当然不是。
此警告(与任何其他警告一样)的真正目的是让程序员知道出现了问题。
这真的很简单:PHP 只是告诉你“你不要忘记给这个变量赋值吗,兄弟?看来你会使用它,所以,你期望它有一些价值,但是没有' t. 只是为了让你们知道。” 但是通过使用 isset() 我们只是堵住了这个警告,仅此而已。对自己不利。

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

一个小例子:

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

这个sn-p 会打印多少行?只有一个。

因此,每一个脚本变量都应该在使用前进行初始化。

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

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

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

【讨论】:

  • 所以在这种情况下最好只分配空白值,例如 $home = "";在那些不会使用这些变量的页面的开头?
  • @Robert 是的,它将确保您不会打印出任何意外值。
  • @Robert 它将使此错误消息为您工作!我一直在寻找合适的词,看来我终于找到了。这样的错误信息是你的朋友,而不是敌人。如果您忘记设置 $contact 变量 - 它会告诉您!还有什么更方便的?但是通过使用 isset() 你只会堵住这个警告,仅此而已
  • 感谢您在这方面的所有帮助。我真的很感激 :) 理解是关键!我已经用分辨率更新了我的初始帖子。
【解决方案2】:

更好的编程习惯是先检查它是否已设置。比如

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

【讨论】:

  • 所以这是一个简单的解决方法。我只是将这个添加到每个。 isset 只是一个简单的函数来查看变量是否存在?我认为这方面的处理能力可以忽略不计?
  • 开销可以忽略不计,是的。我不确定为什么 Col Shrapnel 说检查不好。如果您不确定是否设置了某些内容,我认为最好检查一下。
  • @Robert 你不觉得添加代码只是为了解决错误消息很奇怪吗?
  • @Michael:如果我见过的话,这就是代码的味道。开发人员应该始终确切地知道哪些变量在浮动。虽然不会让你失望...... :)
  • @Col。弹片我认为最好不要首先为错误创建位置。这是我通常使用 JQuery 或 HTML 编码的方式,并且我假设相同的基本规则适用于 PHP。我只是不确定最好的方法。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2011-06-12
    相关资源
    最近更新 更多