调用null变量vs未初始化的变量PHP

时间:2018-04-09 11:06:02

标签: php

调用并返回未初始化变量的值是不好的,因为未初始化的任何内容都不会被返回。 Vs返回一个初始化为NULL的变量。

例如:

未初始化变量,如果条件为假,则可能不返回

if($me === 1){
   $display_this = "<p>Hi</p>";
} 

echo$display_this;

初始化版本

$display_this = null;
if($me === 1){
   $display_this = "<p>Hi</p>";
} 

echo$display_this;

在执行不初始化变量的版本时是否有任何问题,PHP能否正确处理?没有丢弃任何错误?

我问的原因是因为当整个地方初始化变量较少时,我发现更容易阅读。我有一些代码有太多的变量,如果我初始化所有这些代码可以使该列表更长。我这样做很好吗?

3 个答案:

答案 0 :(得分:1)

PHP的行为会相同,但如果你这样做会提出一个通知,并且有几个原因可以解释为什么它的风格很差&#34;。我觉得最容易解释的是你将代码移动到循环中:

$people = [0, 1, 2, 3];
foreach ( $people as $me ) {
    if($me === 1){
       $display_this = "<p>Hi</p>";
    } 
    echo $display_this;
}

这会说&#34;嗨!&#34; 三次,因为每次迭代时变量都不会重置为空白。

相反,如果您将其初始化为适当的默认值(在这种情况下,空字符串比null更有意义,因为您将其传递给echo),它将作为预期:

$people = [0, 1, 2, 3];
foreach ( $people as $me ) {
    $display_this = '';
    if($me === 1){
       $display_this = "<p>Hi</p>";
    } 
    echo $display_this;
}

通常,初始化变量有助于本地化它:我从这些行中一眼就知道$display_this的所有可能值,这对您的版本来说是不正确的:< / p>

    $display_this = '';
    if($me === 1){
       $display_this = "<p>Hi</p>";
    } 
    echo $display_this;

正如评论中所指出的,如果我们添加else块:

,此示例也会起作用
$people = [0, 1, 2, 3];
foreach ( $people as $me ) {
    if($me === 1){
       $display_this = "<p>Hi</p>";
    } else {
       $display_this = '';
    }
    echo $display_this;
}

但是,如果ifelse块增长,我们就无法一眼就看到每次循环都会重置此变量,如果我们可以轻松引入错误添加elseif块:

$people = [0, 1, 2, 3];
foreach ( $people as $me ) {
    if($me === 1){
       $display_this = "<p>Hi</p>";
    } elseif ( $me === 2 ) {
       // Do something unrelated, and forget to set $display_this
    } else {
       $display_this = '';
    }
    echo $display_this;
}

最后,请注意:

  

我有一些代码含有太多变量

这使得更多这些变量的本地化非常重要,而不是更少。重构此类代码的方法之一是将其分解为根据自己的变量集合执行的单独函数,但如果变量可能在第2行上设置了值并在第200行上使用,则无法轻松完成此操作

答案 1 :(得分:0)

在你的第一个例子中......

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$me = 0;
if($me === 1){
    $display_this = "<p>Hi</p>";
}

echo $display_this;

会给......

PHP Notice:  Undefined variable: display_this ...

哪个不好。添加

$display_this = null; 

摆脱这个。

答案 2 :(得分:0)

我个人认为,如果不初始化变量,你就不会对任何人有所帮助,也不会使你的代码更具可读性。

  • 我认为,通过不初始化你并没有明确表达你的意图,从而使理解你的代码更加困惑。
  • 如果你的代码通过添加初始化真的会变得更加混乱,那么你可能有太多的变量而你的代码需要重构。
  • 如果你发现自己做的事情很有趣,那就是#34;或者违背惯例,在开始自己的道路之前,你最好真正了解自己的所作所为。

但是,这真的是一场宗教讨论。

<?php
$test = NULL;

var_dump($test);

var_dump($what);

显示$ test和$返回NULL。所以,几乎你的代码应该工作。虽然有通知消息:

php test2.php
NULL
PHP Notice:  Undefined variable: what in test2.php on line 6

Notice: Undefined variable: what in test2.php on line 6
NULL