blue7wings
V2EX  ›  PHP

PHP 有没有必要进行变量声明?

  •  1
     
  •   blue7wings · Sep 7, 2015 · 5754 views
    This topic created in 4076 days ago, the information mentioned may be changed or developed.

    写代码的时候,总是习惯像其他语言一样实现声明下变量(给默认值),比如,我知道$age 是表示年龄的话,我就会:
    $age = 0;

    好处:
    1. 当没有给这个变量赋值,而返回这个变量时会有一个默认的值.
    2. 条理更加清晰

    坏处:
    1. 变量多的时候,会导致有一长串的变量声明

    不知道各位有没有这个习惯,怎么看?

    22 replies  •  2015-09-08 17:48:35 +08:00
    shidenggui
    shidenggui
    Sep 7, 2015
    1
    不能链式赋值?
    `$v1 = $v2 = $v3 = 0;`
    bdbai
    bdbai
    Sep 7, 2015 via iPhone
    2
    莫名其妙蹦个变量出来会很诡异。
    raincious
    raincious
    Sep 7, 2015
    3
    你是说变量集体初始化操作?比如

    $currentTime = $nextTime = $expireTime = 0;

    这样的?

    我原先也这么写,直到 PHPStorm 告诉我这样不对,因为有些变量会被直接覆盖,就像:

    $currentTime = 0;

    $currentTime = time ();

    所以还是按需初始化比较好。
    slayerdoomsday
    slayerdoomsday
    Sep 7, 2015
    4
    个人觉得初始化变量应该是个好习惯吧,尤其是声明数组的时候。
    blue7wings
    blue7wings
    OP
    Sep 7, 2015
    5
    @raincious 我也是这么认为...首先分开写美观点嘛..
    kookxiang
    kookxiang
    Sep 7, 2015 via Android
    6
    不需要,因为变量有作用域。
    声明变量主要是以前 register global 的时候才用的吧
    konakona
    konakona
    Sep 7, 2015❤️1
    7
    类成员最好先声明,方法变量则按需声明,比如说:

    function imafunc ($arr ){
    $times = [];
    foreach ($arr as $row ){
    $times[] = $row['created_at'];
    return $times;
    }
    }
    只用一次的变量我会在用之前声明。

    还有:

    function imsolong (){
    $times = [];
    $peoples = [];
    $activites = [];
    ...//大约 10 行代码,这里是一个逻辑块,所要用到的变量会在逻辑快之前先统一初始化,告诉别人我接下来要用到这些,我顺便可以在初始化的时候写上注释,告诉别人这是干什么的。

    }
    tabris17
    tabris17
    Sep 7, 2015
    8
    是个好习惯,但是不是必须

    因为 PHP 不像 Javascript ,有作用域链。

    而且你可以认为每个变量的初始值是 null ,不确定是否初始化,则可以用 isset 来判断。
    zts1993
    zts1993
    Sep 7, 2015
    9
    严谨的说是要的,,但是既然准备图省事那就不用了。。
    lzxgh621
    lzxgh621
    Sep 7, 2015 via Android❤️1
    10
    Notice: Undefined index
    jhdxr
    jhdxr
    Sep 7, 2015
    11
    不确定楼主所说的『变量声明』是指什么。
    `$age = 0`在我看来做了两件事情:声明`$age`的存在,和对`$age`进行赋值为零。
    如果你说的仅仅是前者,我认为是不必要的。只需要确保在使用一个变量前,一定对它进行过赋值即可。
    实际上在*使用*未声明的变量的时候, php 同样会抛出一个 notice 。
    例如,
    ```
    <?php
    echo $undefined_var;
    ```
    >Notice: Undefined variable: undefined_var in R:\a.php on line 2
    jhdxr
    jhdxr
    Sep 7, 2015
    12
    嗯。。。顺便问下怎么贴代码的。。。好像 markdown 在这儿不管用。。。
    msg7086
    msg7086
    Sep 8, 2015
    13
    @jhdxr 可以贴 gist 。
    Caringor
    Caringor
    Sep 8, 2015
    14
    不一定要這樣寫,不過我的話是習慣了。
    Zzzzzzzzz
    Zzzzzzzzz
    Sep 8, 2015
    15
    旧 php 版本存在 magic_quotes_gpc 并且为 on 的情况下不初始化变量有可能会导致安全问题, 只考虑最近版本的话用到可能未赋值的变量 isset 或者 empty 够了, 不过这类判断写多了也挺烦的.
    cxbig
    cxbig
    Sep 8, 2015
    16
    一般使用不需要
    如果是判断里赋值,判断后使用,考虑在判断前加一个初始值
    数组内特殊 index 最好先赋值
    类属性空值( null, array (), ...)不用赋值。
    arka
    arka
    Sep 8, 2015
    17
    不声明在解析器严格模式就会报错。如果在 nginx fastcgi 下还可能白屏。找不到错误
    LaughingMeMe
    LaughingMeMe
    Sep 8, 2015
    18
    intNUM,arrData..and so on...
    jianghu52
    jianghu52
    Sep 8, 2015
    19
    初始化还是很有必要的。在很多时候你初始化一个奇怪的变量,一出错很容易就能看的出来。
    jhdxr
    jhdxr
    Sep 8, 2015
    20
    @msg7086 我的意思是像 LZ 那样子,他的代码好像明显有北京包围的。。。
    ConteMan
    ConteMan
    Sep 8, 2015
    21
    我觉得初始化的左作用大于声明的意义
    Roope
    Roope
    Sep 8, 2015
    22
    一般变量我都会初始化。特别是数组。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1711 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 105ms · UTC 17:28 · PVG 01:28 · LAX 09:28 · JFK 12:28
    ♥ Do have faith in what you're doing.