我想说:“Php的强大不言而喻”,这里会应该会有人说这个语言最强大,那个语言最好,小编声明本栏目不比较哪个语言好与不好,本栏目只针对php语言的本性,以及跟我一样在学习php的朋友一起分享我的经验之谈。小编不是php高手,小编只是php的忠实粉丝,投机的话可以跟小编一起聊聊php,一起分享大家的一些经验。
昨天有人回复我说何为弱类型,强调了三遍,我也没解释,今天就在这篇文章解释一下何为弱类型,弱类型的好处以及弊端。小编之所以认为php很强大是因为php提供了很多独有的特性工开发者使用,其中一个就是php弱类型机制。
先看一个例子,弱类型可以做以下这些操作:
例子1:
<?Php $iruohong = 1; //整数型 $iruohong = array(); //数组型 $iruohong = “iruohong.com”; //字符串型 ?>
有过一点编程经验的朋友通过这段代码就有点弱类型的概念了,这就是php的弱类型机制的其中一个表现,php内核的开发者是想通过这种不需要声明的体系提高开发者的开发效率。
然而这种机制会带来一些麻烦,比如下面的一些比较会给你开发者带来一些麻烦,如果开发者没注意。
例子2:
<?Php $a = null; $b = false; If($a == $b){ echo “a和b相等!”; }else{ echo “a和b不相等!”; } ?>
<?Php $a = ''; $b = 0; //同样为真 If($a == $b){ echo “a和b相等!”; }else{ echo “a和b不相等!”; } ?>
测试一下你会发现两段代码都会输出 a和b相等! ,新手朋友就会很诧异了怎么会相等呢?小编也吃过这方面的亏,原因是在你比较的时候php不会严格检验传入的变量类型,将变量自由的转换类型。因为无论变量是0 null ‘’还是false,比较的时候php都默认为空,整数值的话都是0,所以就相等了。如果你非要比较出几个值不一样的话你就用“===”,三个等号代表完全相等,包括类型和值都相等。这是一些新手会犯的一些错误。
说了那么多弱类型的东西,下面我们比较一下强类型和弱类型的区别。
(1)不管是强类型还是弱类型,变量都有两个属性:类型和值;也就是说,弱类型的变量同样有类型。
不管是哪一种编程语言,其中使用的变量,都既有类型,又有值。强类型的变量类型,必须在源代码中明确定义,称之为“变量声明”,弱类型的变量类型则是无需声明的,由解释器解释。但是,这并不意味着,弱类型的变量就没有类型这一概念了,举例来说,PHP的gettype就是返回该变量“当前”的类型。
(2)错误认识:【有人认为强类型的变量类型是不能改变的,弱类型变量是随需改变的,强类型的变量一经声明,就只能存储这种类型的值,其他的值则必须通过转换之后才能付给该变量,有编译器自动理解的转换,也有由程序员明确指定的强制转换。弱类型的变量类型则是随着需要不断转换。】黑括号里面的是错误认识,很多人都是这么错误认识的,其实不管是前类型的变量类型还是弱类型的变量类型都是不能改变的。下面的例子就说明了一切,给$b赋值的时候$a的值是变化的,但是$a的类型是没有变化的,下面例子请自行测试
例子3:
<?php $a = 25; echo $a.'|'.gettype($a).'<br>'; $b = $a.'good'; echo $b.'|'.gettype($b).'<br>'; echo $a.'|'.gettype($a).'<br>'; ?>
输出结果是:
25|integer25good|string25|integer
(3)强类型语言的强制转换并没有改变变量类型
强类型语言有个“强制转换”,这改变的是变量的值的类型,以便进行赋值,而没有改变变量的类型。变量的类型是不允许改变的。
以上是为什么说php是弱类型好学,跟其他语言的区别的详细内容。更多信息请关注PHP中文网其他相关文章!