PHP 标识符串较为

摘要: 由于 PHP 是弱种类語言,因此在开展较为的情况下,有时候候会出現预料以外的結果,今日大家就来小结一下 PHP 自变量较为的一些状况。最先表明,仅有同样数据信息种类的值才可以较...

由于 PHP 是弱种类語言,因此在开展较为的情况下,有时候候会出現预料以外的結果,今日大家就来小结一下 PHP 自变量较为的一些状况。

最先表明,仅有同样数据信息种类的值才可以较为,PHP 都不列外。只不过是 PHP 在开展不一样种类的值较为以前会将其变换对同样的数据信息种类,随后开展较为。那样 PHP 的值较为难题就变换以便 PHP 不一样数据信息种类中间的变换难题了。

标识符串和标识符串较为

PHP 标识符串较为通常为按位开展较为,因此下列表述式均能获得大伙儿要想的結果。

var_dump(  ==  null  //false var_dump(  ==  0  //false

可是,一旦标识符串的內容是合理合法的数据表述式(包含科学研究记数法),这时候候即便较为的全是标识符串,PHP也会开展数据信息种类变换, 最先把标识符串变换为相匹配的整型或是浮点型,随后开展较为。

var_dump( 0  ==  00  //truevar_dump( 100  ==  1E2  //truevar_dump( .12  ==  0.12  //truevar_dump( 12aaa  ==  12  //false 由于  12aaa  其实不都是数据,因此不开展种类变换,仍然安位较为var_dump( 12aaa  == 12); //true 由于较为计算符右侧是整型 12,因此优秀行种类变换,随后较为

假如大家把  ==  换为  === 結果会是如何样呢?大家看来一下

var_dump( 0  ===  00  //falsevar_dump( 100  ===  1E2  //falsevar_dump( .12  ===  0.12  //falsevar_dump( 12aaa  ===  12  //falsevar_dump( 12aaa  === 12); //false

能看到全百分号===针对 PHP 标识符串的较为会严苛实行按位较为,即便针对数据表述式的标识符串都不会开展变换。

标识符串和布尔运算值较为

假如种类不一样,例如标识符串和布尔运算值开展较为,PHP 最先会把标识符串变换为布尔运算值随后开展较为。大家先看来一组 Demo

var_dump(   == true ); //falsevar_dump( 0  == true); //falsevar_dump( 1  == true); //truevar_dump( 00  == true); //truevar_dump( 0q  == true); //truevar_dump( a0  == true); //truevar_dump( null  == true); //true

PHP 标识符串变换为布尔运算值的标准是

若标识符串为空,则为 false;若标识符串不以空,则为 true;‘0’ 为 false

标识符串和数据种类的值较为

假如标识符串和数据信息种类的值较为,最先标识符串会变换为数据种类的值,随后开展较为。变换标准以下:

假如标识符串是合理合法的数据表述式(包含科学研究记数法),则将其变换为相匹配的数据;假如标识符串以数据开始,或是以小数点开始而且后边紧随数据 ,会取开始一部分的数据表述式将其变换为数据;假如标识符串以非数据开始,或是小数点开始后边紧随非数据,变换为0。

因此会出现下列結果

var_dump( adkf  == 0); //truevar_dump( 0asda  == 0); //truevar_dump( 1ad  == 0); //falsevar_dump( adkf  ==  0asda  //falsevar_dump( adkf  ==  0  //falsevar_dump( 0asda  ==  0  //falsevar_dump( .12ads  == 0.12); //truevar_dump( E2ada  == 100); //falsevar_dump( 1E2asd  == 100); //truevar_dump( 1E2asd  ==  100  //false
有关 null

在 PHP 中 待定义的自变量和特性和 Null 相同,因此会出现下列結果

$a = null;$b;var_dump(isset($a)); //falsevar_dump(isset($b)); //falsevar_dump(isset($c)); //falseclass A{ public $v1 = null; public $v2; } $o = new A(); var_dump(isset($o- v1)); //false var_dump(isset($o- v2)); //false var_dump(isset($o- v3)); //false var_dump($c == null); //会出现 Notice 出错,但是結果是 true var_dump($c === null); //会出现 Notice 出错,但是結果是 true var_dump(is_null($c)); //会出现 Notice 出错,但是結果是 true
别的

也有一些下边的事例,也是涉及到到种类变换

var_dump( [] == false ); //truevar_dump(   == false ); //truevar_dump( null == false ); //truevar_dump(   == null); //truevar_dump( [] == null); //truevar_dump(   == []); //false
小结

因为 PHP 的弱种类特点,在开展较为或是 if 分辨的情况下,有时候候会产生出乎意料的結果。因此再用 PHP 做分辨的情况下,一定要铭记不一样自变量的种类。以便避免出乎意料的难题,可使用全相当于===或是标识符串较为涵数strcmp开展分辨

Note: 之上编码所有应用7.3 版本号得到結果






联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:游戏小程序制作