比如下面的代码:
$str4="php-class,mysql-class,div-css,0,dreamweaver";
$s=strtok($str4,',');
while($s!==false){
echo $s."<br>";
$s=strtok(',');
}
while($s===true){}为啥就无法显示呢?
true在什么地方使用呢~~
初学者 请大家关爱 O(∩_∩)O~
新年开心~
我自己的理解是:!==false 就要满足1.值不等于 2.类型不等于,当strtok分解结束时返回null(蒙的哈)出现$s=false 使循环语句不成立;但如果使用===true时,也要满足:1.值等于 2.类型等于,那么第一个被分解的字符串都不是布尔值,所以循环直接停止,但如果使用'=='那么遇到'0'时,(不等于true) !=ture,那么此时循环也会停止。
使用!==false,就意味着值不等于,类型也不等于,只有返回false才停止
试了试,貌似对的,但是这么复杂的逻辑光想就得5分钟,脑子乱了。。。。。
PHP 是一门弱类型语言,弱类型语言最重要的原因:隐式类型转换。
最主要的表现是赋值、计算和比较:
赋值:
上面例子中 $a 的类型是随着赋值的类型改变而改变的,你肯定知道这在 C 语言中是不行的,因为 C 语言中变量类型都是声明的时候确定的,确定下来之后就不能改变。
计算:
类似的代码在 Python 中也是不行的,你会得到一个这样的错误:
Python 也是强类型语言,不会对变量的类型进行推断,所以就直接抛了错误给你。但是 PHP 是怎么做的呢?
Python 中连接字符串也是使用
+
,但是 PHP 需要用.
。在 PHP 内部,当你使用+
的时候,符号两边的变量都会先被转换成数字类型(浮点、整型),同理,使用.
的时候,符号两边实际上都会先被转换成字符串。因为 Python 不需要进行转换,遇到数字计算,遇到字符串连接就行了。这个转换过程也是很有意思的:
看到上面你应该已经猜出来了:字符串是从前往后搜索直到遇到一个非数字字符为止。
下面我们来说这里会遇到的情况:比较。
==
和===
包括!=
和!==
的区别其实你已经猜到了,一个会比较类型,一个不会比较类型。在 PHP 内部的描述中用equal
和identical
这两个单词来描述。感受一下区别。准确的顺序是:
===
和!==
是先判断类型是否一样,再比较具体的值。如果类型都不一样,那也没必要继续比较了。这意味着即使是1.0 === 1
得到的也会是false
,因为类型不同。其实
==
也是要检查类型的,不过动作却是:它会先根据操作符两边变量类型的情况做出判断对变量先做隐式的转换然后再进行比较!这里我不告诉你转换的顺序,但是基本的一些你应该知道:还有你可能不知道的,比如:
到这里这个问题基本上清楚了。因为
'0' == false
是成立的,这就是要用!==
的原因。话说回来
strtok
其实本身是个奇怪的函数,这是个自带迭代的函数。如果使用!=
来判断, 就无法准确的取出strtok('hello world 0', ' ')
这个分解的第三段0
。