Re: [请益] PHP变量宣告

楼主: JohnRoyer (Zero 日落)   2017-11-15 12:37:41
: 因为我之前是写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 的话
建议会拿来做判断、运算的变量最好都先初始化
并且指定正确的资料型态
作者: ericdoctor (小黑)   2017-11-15 15:53:00
谢谢你的回文 我理解强型态与弱型态语言,因为本身是F2E,所以也有写js,只是不太懂在PHP,宣告并赋值的行为应该怎么用语言描述原来要把error_reporting打开才会看到error,谢谢告知,我也有爬文到相关的用法是说要使用前要先初始化,我也认同这一点,但是不知道有没有建议的写法(比如说我今天想用整数要先赋的值是0,想用字串就要先给空字串)或是有什么关键字或资源可以跟原po请教
作者: MOONRAKER (㊣牛鹤鳗毛人)   2017-11-15 16:03:00
当然是要当什么用就设什么啊 初值设0.0下面当字串用你是参加IOCCC吗
作者: ericdoctor (小黑)   2017-11-15 18:43:00
我具体讲一下我的问题好了不好意思 这边用Java表示有时候会这样写int x;if(条件){ x =10;}else if(){ x=11;}但是php只要if(条件){ $x =10;}else if(){ $x=11;}揪能正常使用,不知道这样的写法是好的还是不好的
作者: tkdmaf (皮皮快跑)   2017-11-15 21:36:00
楼上,你的写法会引发nil的问题吧。你这样万一二个条件都不对不就崩了?
作者: ericdoctor (小黑)   2017-11-15 21:53:00
的确还要再加上else才完成,我这边只是省篇幅,抱歉造成误解,主要是想请问这样变量还有需要在if叙述之前初始化吗?
作者: MOONRAKER (㊣牛鹤鳗毛人)   2017-11-16 01:51:00
你有执行路径观念吧?拿来php也是一样你确定nested if可以对应到所有状况 当然可以不要初值你不太确定 或者想保平安 像开车门之前先看后面一样那就把初值写在前面 这样起码有个fail-safe要考虑一下 这个code将来可能会交给别人 那时他会怎么修改 会不会在else后面再加东西让他不能涵盖所有状况

Links booklink

Contact Us: admin [ a t ] ucptt.com