V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
blue7wings
V2EX  ›  PHP

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

  •  1
     
  •   blue7wings · Sep 7, 2015 · 5254 views
    This topic created in 3885 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
        1
    shidenggui  
       Sep 7, 2015
    不能链式赋值?
    `$v1 = $v2 = $v3 = 0;`
    bdbai
        2
    bdbai  
       Sep 7, 2015 via iPhone
    莫名其妙蹦个变量出来会很诡异。
    raincious
        3
    raincious  
       Sep 7, 2015
    你是说变量集体初始化操作?比如

    $currentTime = $nextTime = $expireTime = 0;

    这样的?

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

    $currentTime = 0;

    $currentTime = time ();

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

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

    还有:

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

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

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

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