写代码的时候,总是习惯像其他语言一样实现声明下变量(给默认值),比如,我知道$age 是表示年龄的话,我就会:
$age = 0;
好处:
1. 当没有给这个变量赋值,而返回这个变量时会有一个默认的值.
2. 条理更加清晰
坏处:
1. 变量多的时候,会导致有一长串的变量声明
不知道各位有没有这个习惯,怎么看?
1
shidenggui 2015-09-07 21:27:52 +08:00
不能链式赋值?
`$v1 = $v2 = $v3 = 0;` |
2
bdbai 2015-09-07 21:27:59 +08:00 via iPhone
莫名其妙蹦个变量出来会很诡异。
|
3
raincious 2015-09-07 21:31:29 +08:00
你是说变量集体初始化操作?比如
$currentTime = $nextTime = $expireTime = 0; 这样的? 我原先也这么写,直到 PHPStorm 告诉我这样不对,因为有些变量会被直接覆盖,就像: $currentTime = 0; $currentTime = time (); 所以还是按需初始化比较好。 |
4
slayerdoomsday 2015-09-07 21:33:39 +08:00
个人觉得初始化变量应该是个好习惯吧,尤其是声明数组的时候。
|
5
blue7wings OP @raincious 我也是这么认为...首先分开写美观点嘛..
|
6
kookxiang 2015-09-07 21:37:09 +08:00 via Android
不需要,因为变量有作用域。
声明变量主要是以前 register global 的时候才用的吧 |
7
konakona 2015-09-07 21:41:03 +08:00 1
类成员最好先声明,方法变量则按需声明,比如说:
function imafunc ($arr ){ $times = []; foreach ($arr as $row ){ $times[] = $row['created_at']; return $times; } } 只用一次的变量我会在用之前声明。 还有: function imsolong (){ $times = []; $peoples = []; $activites = []; ...//大约 10 行代码,这里是一个逻辑块,所要用到的变量会在逻辑快之前先统一初始化,告诉别人我接下来要用到这些,我顺便可以在初始化的时候写上注释,告诉别人这是干什么的。 } |
8
tabris17 2015-09-07 22:10:42 +08:00
是个好习惯,但是不是必须
因为 PHP 不像 Javascript ,有作用域链。 而且你可以认为每个变量的初始值是 null ,不确定是否初始化,则可以用 isset 来判断。 |
9
zts1993 2015-09-07 22:27:43 +08:00
严谨的说是要的,,但是既然准备图省事那就不用了。。
|
10
lzxgh621 2015-09-07 22:58:08 +08:00 via Android 1
Notice: Undefined index
|
11
jhdxr 2015-09-07 23:04:06 +08:00
不确定楼主所说的『变量声明』是指什么。
`$age = 0`在我看来做了两件事情:声明`$age`的存在,和对`$age`进行赋值为零。 如果你说的仅仅是前者,我认为是不必要的。只需要确保在使用一个变量前,一定对它进行过赋值即可。 实际上在*使用*未声明的变量的时候, php 同样会抛出一个 notice 。 例如, ``` <?php echo $undefined_var; ``` >Notice: Undefined variable: undefined_var in R:\a.php on line 2 |
12
jhdxr 2015-09-07 23:04:57 +08:00
嗯。。。顺便问下怎么贴代码的。。。好像 markdown 在这儿不管用。。。
|
14
Caringor 2015-09-08 00:31:26 +08:00
不一定要這樣寫,不過我的話是習慣了。
|
15
Zzzzzzzzz 2015-09-08 00:32:45 +08:00
旧 php 版本存在 magic_quotes_gpc 并且为 on 的情况下不初始化变量有可能会导致安全问题, 只考虑最近版本的话用到可能未赋值的变量 isset 或者 empty 够了, 不过这类判断写多了也挺烦的.
|
16
cxbig 2015-09-08 01:12:20 +08:00
一般使用不需要
如果是判断里赋值,判断后使用,考虑在判断前加一个初始值 数组内特殊 index 最好先赋值 类属性空值( null, array (), ...)不用赋值。 |
17
arka 2015-09-08 07:49:25 +08:00
不声明在解析器严格模式就会报错。如果在 nginx fastcgi 下还可能白屏。找不到错误
|
18
LaughingMeMe 2015-09-08 11:43:40 +08:00
intNUM,arrData..and so on...
|
19
jianghu52 2015-09-08 12:51:54 +08:00
初始化还是很有必要的。在很多时候你初始化一个奇怪的变量,一出错很容易就能看的出来。
|
21
Conte 2015-09-08 16:44:41 +08:00
我觉得初始化的左作用大于声明的意义
|
22
Roope 2015-09-08 17:48:35 +08:00
一般变量我都会初始化。特别是数组。
|