2011-03-04 69 views
0

我在我的单个页面中使用此代码来创建独特的标题和活动选项卡。PHP是否有效回显一个不存在的变量?

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

你在说“$ about”和“$ contact”吗? – glomad 2011-03-04 01:30:16

+1

打开错误报告。 '注意:未定义变量:myvar'。此外,还有更好的方法来确定活动页面。 – drudge 2011-03-04 01:31:28

+0

你能链接到一个更好的例子或给出一个更好的例子吗?这是我能想到的最简单的事情,但是再次...我是PHP的新手。 – 2011-03-04 01:39:24

回答

4

是的,回声(和任何其他用法)总是不好编程一个不存在的变量。
它实际上是错误 - 你只是因为错误的PHP设置而看不到它。

error_reporting(E_ALL); 

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

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

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

当然不是。
此警告的真正意图(与其他警告一样)是让程序员知道出现了问题。
这真的很容易:PHP只是告诉你“难道你不会忘记给这个变量分配一些值吗?兄弟?看来你会使用它,所以,你期望它有一些价值,但没有'只是让你知道。“ 但是通过使用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,然后使用从原始外部变量准备好的值初始化它的项目。

+0

因此,在这种情况下,最好只分配空白值,例如$ home =“”;在那些变量不会被使用的页面的开头? – 2011-03-04 01:48:21

+0

@Robert是的,它会让你确信没有意外的值可以打印出来。 – 2011-03-04 02:08:10

+1

@Robert,它会使这个错误消息为你工作!我正在寻找合适的词语,似乎我终于找到了它。这样的错误信息是你的朋友,而不是敌人。如果你忘记设置$ contact变量 - 它会告诉你!什么可以更方便?但通过使用isset(),你只会唠叨这个警告,而不是更多 – 2011-03-04 02:13:57

4

更好的编程习惯是检查它是否设置为第一位。如

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

这里实际上并没有更好的 – 2011-03-04 01:33:14

+0

所以这是一个简单的修复。我只是将它添加到每个。 isset只是一个简单的函数来查看变量是否存在?我认为处理能力可以忽略不计? – 2011-03-04 01:36:33

+0

这是微不足道的开销,是的。我不确定Col Shrapnel为什么说检查并不好。如果您不确定是否设置了某些内容,我认为最好检查一下。 – 2011-03-04 01:40:53

相关问题