搜索
首页后端开发php教程请教一个小白问题:为什么php常常用!==false表示真的,为啥不直接用===true?

比如下面的代码:

<code>$str4="php-class,mysql-class,div-css,0,dreamweaver";
$s=strtok($str4,',');
while($s!==false){
    echo $s."<br>";
    $s=strtok(',');
}</code>

while($s===true){}为啥就无法显示呢?
true在什么地方使用呢~~
初学者 请大家关爱 O(∩_∩)O~
新年开心~

我自己的理解是:!==false 就要满足1.值不等于 2.类型不等于,当strtok分解结束时返回null(蒙的哈)出现$s=false 使循环语句不成立;但如果使用===true时,也要满足:1.值等于 2.类型等于,那么第一个被分解的字符串都不是布尔值,所以循环直接停止,但如果使用'=='那么遇到'0'时,(不等于true) !=ture,那么此时循环也会停止。
使用!==false,就意味着值不等于,类型也不等于,只有返回false才停止
试了试,貌似对的,但是这么复杂的逻辑光想就得5分钟,脑子乱了。。。。。

回复内容:

比如下面的代码:

<code>$str4="php-class,mysql-class,div-css,0,dreamweaver";
$s=strtok($str4,',');
while($s!==false){
    echo $s."<br>";
    $s=strtok(',');
}</code>

while($s===true){}为啥就无法显示呢?
true在什么地方使用呢~~
初学者 请大家关爱 O(∩_∩)O~
新年开心~

我自己的理解是:!==false 就要满足1.值不等于 2.类型不等于,当strtok分解结束时返回null(蒙的哈)出现$s=false 使循环语句不成立;但如果使用===true时,也要满足:1.值等于 2.类型等于,那么第一个被分解的字符串都不是布尔值,所以循环直接停止,但如果使用'=='那么遇到'0'时,(不等于true) !=ture,那么此时循环也会停止。
使用!==false,就意味着值不等于,类型也不等于,只有返回false才停止
试了试,貌似对的,但是这么复杂的逻辑光想就得5分钟,脑子乱了。。。。。

PHP 是一门弱类型语言,弱类型语言最重要的原因:隐式类型转换。

最主要的表现是赋值、计算和比较:
赋值:

$a = 1; // int
$a = '1'; // string

上面例子中 $a 的类型是随着赋值的类型改变而改变的,你肯定知道这在 C 语言中是不行的,因为 C 语言中变量类型都是声明的时候确定的,确定下来之后就不能改变。

计算:

$a = 1;
$b = '2';
echo $a + $b; // 结果是 3

类似的代码在 Python 中也是不行的,你会得到一个这样的错误:

<code>TypeError: unsupported operand type(s) for +: 'int' and 'str'</code>

Python 也是强类型语言,不会对变量的类型进行推断,所以就直接抛了错误给你。但是 PHP 是怎么做的呢?
Python 中连接字符串也是使用 +,但是 PHP 需要用 .。在 PHP 内部,当你使用 + 的时候,符号两边的变量都会先被转换成数字类型(浮点、整型),同理,使用 . 的时候,符号两边实际上都会先被转换成字符串。因为 Python 不需要进行转换,遇到数字计算,遇到字符串连接就行了。

这个转换过程也是很有意思的:

$a = 1;
$b = '2';
echo $a + $b; // 3
$b = 'a2';
echo $a + $b; // 1
$b = '2a';
echo $a + $b; // 3

看到上面你应该已经猜出来了:字符串是从前往后搜索直到遇到一个非数字字符为止。

下面我们来说这里会遇到的情况:比较。

===== 包括 !=!== 的区别其实你已经猜到了,一个会比较类型,一个不会比较类型。在 PHP 内部的描述中用 equalidentical 这两个单词来描述。感受一下区别。

准确的顺序是:===!== 是先判断类型是否一样,再比较具体的值。如果类型都不一样,那也没必要继续比较了。这意味着即使是 1.0 === 1 得到的也会是 false,因为类型不同。

其实 == 也是要检查类型的,不过动作却是:它会先根据操作符两边变量类型的情况做出判断对变量先做隐式的转换然后再进行比较!这里我不告诉你转换的顺序,但是基本的一些你应该知道:

0 == false; // true
'1' == 1; // true
null == false; // true
null != 'null'; // true

还有你可能不知道的,比如:

123 == '123abc'; // true
'0e123' == '0e456'; // true

到这里这个问题基本上清楚了。因为 '0' == false 是成立的,这就是要用 !== 的原因。

话说回来 strtok 其实本身是个奇怪的函数,这是个自带迭代的函数。如果使用 != 来判断, 就无法准确的取出 strtok('hello world 0', ' ') 这个分解的第三段 0

http://cn2.php.net/manual/zh/function.strtok.php

有些函数默认返回值为intstring 类型,只有在失败的时候才返回false。所以进行判断的时候使用!==false。比如strtok来说,如果执行结果为期望结果,则返回string否则返回false。so~~

更新一下

再比如 strpos 之类的函数,返回在$str$find在哪个位置,比如 在123中寻找1的位置,那将返回int(0)。只有在未找到的时候,返回false

然而, if (0) 的结果是false,if中的逻辑将不会执行。所以判断 if ($result !== false) 才是正确的方法。

关于 !==!= =====的判定区别,自己Google一下吧。

<code>'something' !== false 
'something' !== true</code>

这两个表达式都为真

我自己的理解是:!==false 就要满足1.值不等于 2.类型不等于,当strtok分解结束时返回null(蒙的哈)出现$s=false 使循环语句不成立;但如果使用===true时,也要满足:1.值等于 2.类型等于,那么第一个被分解的字符串都不是布尔值,所以循环直接停止,但如果使用'=='那么遇到'0'时,(不等于true) !=ture,那么此时循环也会停止。
使用!==false,就意味着值不等于,类型也不等于,只有返回false才停止
试了试,貌似对的,但是这么复杂的逻辑光想就得5分钟,脑子乱了。。。。。

<code>0 !== false  // true
0 === true // false</code>

因为大多数调用,失败都返回false

成功时返回资源类型 不成功返回false

也许只有在失败的时候返回false,成功并没有返回值。

假如某接口返回的resource类型,你用true怎么比较?

这个和返回值有关系啊,如果函数返回值是true你就可以这么做啊。。不过就PHP内置函数而言,一般是错误返回flase,所以用false来判断是否出错。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境