由于PHP的弱类型性质,你可以做一些奇怪的事情,其中​​一些是好的,其中一些将使你掉到坑里面去。比如:

echo '1' + 5;

在某些语言中,这可能会导致程序崩溃,但PHP会尝试将任何字符串计算为整数。在这种情况下,它将字符串转换为整数1,并将其添加到5以生成6。

顺便说一句,如果你在JavaScript中这样做,那么你会发现相反的结果。因为连接字符与添加字符相同,如果任何当前值是字符串,JavaScript将始终尝试截断该值。所以JavaScript中的结果将是“15”。

如果我们将字符串更改为字符串“one”然后执行相同的操作,则结果为5。

echo 'one' + 5;

这是因为如果PHP无法将字符串转换为整数,则假定它为0。

我们可以通过比较将其提升到另一个层次。查看PHP类型比较表,您可以看到有两种不同的方法可以比较两个值。

请看下面的代码片段。期待这个结果会是什么?

  1. $a = 'string';
  2. $b = 0;
  3.  
  4. if ( $a == true && $b == false && $a == $b ) {
  5. }

那么答案是程序会退出,因为所有这些比较都是正确的。

'a string'== true等于true,因为如果与布尔值进行比较,PHP会将任何非空字符串计算为true。

0 == false等于true,因为与布尔值比较时,整数0被计算为false。

'a string'== 0也计算为true,因为与整数相比,任何字符串都会转换为整数。如果PHP无法正确转换字符串,则将其计算为0.因此0等于0,等于为真。

要解决此问题,您可以使用===运算符代替==运算符。此运算符(也称为三重等于运算符)仅在两个值具有相同值时才会求值为true,如果它们是相同类型,则仅计算为true 。因此,如果我们将示例更改为使用三等于运算符,则所有项都将计算为false。这是因为字符串不能是布尔值,整数不能是布尔值,字符串不等于整数。

两个等于运算符之间的差异很重要。每个都有它自己的用途,但如果你对你的价值类型有任何疑问,那么使用三等于运算符,特别是当通过测试会给你的程序带来灾难。

使用strpos()等函数时,三重等于运算符是必不可少的。这是因为在找不到字符串时它将返回false。如以下示例中$position变量等于false。

$position = strpos('abcd','z');

但是如果在0位找到字符串会发生什么?如果您使用了双等于运算符,那么您将发现您的位置将等于false。

if (false !== strpos('abcd','a')) {
echo 'found';
} else {
echo 'not found';
}

字符串在PHP比较运算中的变化的更多相关文章

  1. java中a++和++a在较复杂的运算中分析

    关于连加和连减:http://blog.csdn.net/ieayoio/article/details/46431843 以下是一段普遍都了解的代码: public static void main ...

  2. VueX中state变化捕捉不到_getters监测不到state的变化

    原因 可能有多种原因, 现在我说一下我碰到的一种情况: state种有一个变量叫state,它是一个json对象, 可把我害惨了.因为他这个json长这个样: messageBox:{ friendI ...

  3. js 实时监听input中值变化

    注意:用到了jquery需要引入jquery.min.js. 需求: 1.每个地方需要分别打分,总分为100; 2.第一个打分总分为40; 3.第二个打分总分为60. 注意:需要判断null.&quo ...

  4. 关于Java运算中类型自动提升的问题

    1.表达式中的自动类型提升: 表达式求值时,Java自动的隐含的将每个byte.short或char操作数提升为int类型,这些类型的包装类型也是可以的. 例如:short s1 = 1; s1 =  ...

  5. 第50讲:Scala中Variance变化点

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  6. 无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_90_CI_AI" 之间的排序规则冲突。的解决方法

    在SQL SERVICE的查询的时候遇到了“无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_90_CI_AI&q ...

  7. 无法解决 equal to 运算中 "Chinese_PRC_BIN" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突

    无法解决 equal to 运算中 "Chinese_PRC_BIN" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突.问题如下图: 执行一下语 ...

  8. [转] Express 4 中的变化

    http://www.cnblogs.com/haogj/p/3985438.html 概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在 ...

  9. iOS中让Settings Bundle中的变化立即在App中反应出来的两种方法

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了能够在Settings Bundle中的变化在进入App后 ...

随机推荐

  1. MySql 5.7关键字和保留字-附表

    现在使用navicat图形界面或者Hibernate做映射生成表的时候,渐渐的会忽视掉关键字这个问题,而后续也会不断的产生错误提示,一遍遍的查询代码无果,甚至开始怀疑人生,但是其实很多情况下只是使用了 ...

  2. Codeforces 987 K预处理BFS 3n,7n+1随机结论题/不动点逆序对 X&Y=0连边DFS求连通块数目

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...

  3. SQL代码

    SELECT SCHEMA_NAME(SCHEMA_ID)AS ID,name as Table_name FROM sys.tables;--查询表视图 查询表视图

  4. Django 视图层和模板层

    目录 一.网站首页和404页面的路由配置 1. 网站首页路由 2. 404页面 二.Django视图层 1. 小白必会三板斧 (1)HttpResponse (2)render (3)redirect ...

  5. R语言-八皇后问题

    老师给我出了个暑期作业:用R语言解决八皇后问题. 八皇后问题:国际象棋棋盘(8×8)上放8个“后”,使8个“后”之间互相不能被进攻.(即:每个“后”所在行.列.两条斜线都没有其它子) 查看网上,大多用 ...

  6. 详解javaweb中jstl如何循环List中的Map数据_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 详解javaweb中jstl如何循环List中的Map数据 第一种方式: 1:后台代码(测试) List<Map& ...

  7. 【清华集训2014】mex

    题目 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 分析 显然,当\(a_i>n\)时,对答案没有影响,所以全部视为n+1. 有两种方法 ...

  8. c++ copy和operator =

    目录(?)[+] 构造函数 拷贝构造函数 赋值函数   C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函 ...

  9. 导出csv文件(使用a标签)

    https://blog.csdn.net/oscar999/article/details/16342699   productsCSV(e) { const { download } = this ...

  10. node.js入门学习(四)--Demo图书的增删改查

    需求:图书的增删改查,图书数据保存在data.json文件中. 1.Demo结构: 2.首先下载安装node.js,配置环境变量:参考博客 3.项目初始化 1)创建项目根目录node-hello,进入 ...