作者JohnRoyer (Zero 日落)
看板PHP
标题Re: [请益] PHP变数宣告
时间Wed Nov 15 12:37:41 2017
: 因为我之前是写Java的
Java 算是强型别的程式语言 (strong type)
而 PHP 则是弱型别 (weak type)
二者不太能互相比较
: 但是在PHP内
: 变成是要直接给变数然後给值初始化
: 如果没有给值就等於null
: $x; //这样有写跟没写一样,值也是null
: $x = 10; //正常
写个程式做检查,这边先把 error_reporting 打开:
<?php
error_reporting(E_ALL);
var_dump($x);
执行後会出现讯息:
PHP Notice: Undefined variable: x in /home/johnroyer/tmp/qwe.php on line 5
NULL
所以其实 PHP 是会检查变数是否有被初始化的
只是即使没有被初始化也是可以照常拿来使用 .... 然後可能就踩到雷 XD
例如拿没有初始化的变数去其他函式使用:
$list = [1, 2, 3];
array_merge($list, $undefined);
语法上来讲没有任何问题
但是执行的时候就会有 runtime error :
PHP Warning: array_merge(): Argument #2 is not an array
以个人经验
如果希望程式可以避开 runtime error 的话
建议会拿来做判断、运算的变数最好都先初始化
并且指定正确的资料型态
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 211.72.229.31
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1510720665.A.045.html
※ 编辑: JohnRoyer (211.72.229.31), 11/15/2017 12:46:11
1F:推 ericdoctor: 谢谢你的回文 我理解强型态与弱型态语言,因为本身是F 11/15 15:53
2F:→ ericdoctor: 2E,所以也有写js,只是不太懂在PHP,宣告并赋值的行 11/15 15:53
3F:→ ericdoctor: 为应该怎麽用语言描述 11/15 15:53
4F:→ ericdoctor: 原来要把error_reporting打开才会看到error,谢谢告知 11/15 15:57
5F:→ ericdoctor: ,我也有爬文到相关的用法是说要使用前要先初始化,我 11/15 15:57
6F:→ ericdoctor: 也认同这一点,但是不知道有没有建议的写法(比如说我 11/15 15:57
7F:→ ericdoctor: 今天想用整数要先赋的值是0,想用字串就要先给空字串) 11/15 15:57
8F:→ ericdoctor: 或是有什麽关键字或资源可以跟原po请教 11/15 15:57
9F:→ MOONRAKER: 当然是要当什麽用就设什麽啊 初值设0.0下面当字串用 11/15 16:03
10F:→ MOONRAKER: 你是参加IOCCC吗 11/15 16:03
11F:推 ericdoctor: 我具体讲一下我的问题好了 11/15 18:43
12F:→ ericdoctor: 不好意思 这边用Java表示 11/15 18:43
13F:→ ericdoctor: 有时候会这样写 11/15 18:43
14F:→ ericdoctor: int x; 11/15 18:43
15F:→ ericdoctor: if(条件){ x =10;}else if(){ x=11;} 11/15 18:43
16F:→ ericdoctor: 但是php只要 11/15 18:43
17F:→ ericdoctor: if(条件){ $x =10;}else if(){ $x=11;} 11/15 18:43
18F:→ ericdoctor: 揪能正常使用,不知道这样的写法是好的还是不好的 11/15 18:43
19F:→ tkdmaf: 楼上,你的写法会引发nil的问题吧。 11/15 21:36
20F:→ tkdmaf: 你这样万一二个条件都不对不就崩了? 11/15 21:37
21F:推 ericdoctor: 的确还要再加上else才完成,我这边只是省篇幅,抱歉造 11/15 21:53
22F:→ ericdoctor: 成误解,主要是想请问这样变数还有需要在if叙述之前初 11/15 21:53
23F:→ ericdoctor: 始化吗? 11/15 21:53
24F:→ MOONRAKER: 你有执行路径观念吧?拿来php也是一样 11/16 01:51
25F:→ MOONRAKER: 你确定nested if可以对应到所有状况 当然可以不要初值 11/16 01:52
26F:→ MOONRAKER: 你不太确定 或者想保平安 像开车门之前先看後面一样 11/16 01:53
27F:→ MOONRAKER: 那就把初值写在前面 这样起码有个fail-safe 11/16 01:55
28F:→ MOONRAKER: 要考虑一下 这个code将来可能会交给别人 那时他会怎麽 11/16 01:59
29F:→ MOONRAKER: 修改 会不会在else後面再加东西让他不能涵盖所有状况 11/16 02:02