当前位置:  开发笔记 > 编程语言 > 正文

PHP:理解字符串类型杂耍

如何解决《PHP:理解字符串类型杂耍》经验,为你挑选了1个好方法。

如果我在PHP中设置$var为a string,那么该变量将true在任何条件下评估:

$var = "foo";
if ( $var ) {
    echo 'I will be printed';
} else {
    echo 'I will not be printed';
}

我明白我上面的条件会自动输入类型,以便$var转换为bool.

现在,如果我投$var了一个integer,我得到0:

var_dump( (int)$var ); // int(0)

0是一个虚假值,false当转换为bool:

$zero = 0;
var_dump( (bool)$zero ); // bool(false)

考虑到上述情况,为什么我的条件不打印"我不会被打印"?



1> Niet the Dar..:

类型杂耍不是无损的.它带来了潜在的数据丢失.

例如...

var_dump( strval(intval("foo"))); // string(1) "0"

但如果你要写......

if( "foo" == "0") // non-strict comparison intended

你肯定不会指望它运行!事实上并非如此.

因此,因为类型更改伴随着数据丢失,所以您不能指望转换是等效的.换句话说,boolval(intval($var))并且boolval($var)不必相同.

如果你想要比较严格,请使用以下内容:

if( is_string($var) && $var !== "") // is not the empty string

(可以说!==是多余的,!=工作正常,但可以说这整个条件都是矫枉过正)

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有