=,==和===有什么区别?

我认为使用一个等号表示变量,而使用两个等号表示比较条件,最后使用三个等号表示比较变量的值。

看看这个例子...我已经发布了,它将澄清更多的事情..

对于高级PHP用户,了解==和===之间的区别并问自己"当我确定两个操作数是同一类型时,与==或===进行比较会更快吗?",请查看我的 下面的基准脚本。

@Strawberry我觉得问题标签也应该包含javascript标签,因为它也适用于该语言。

(更新):我已经在编辑中添加了javascript标记,因为人们在javascript中使用=的地方存在很多问题。 那不仅适用于PHP,还适用于其他语言。

我继续删除了JavaScript标记:这里的所有答案仅与PHP有关(最新版本除外,该版本非常薄弱),语言处理方式之间存在差异,并且已经存在一个类似的事实上的规范JavaScript问题(等于 运算符(== vs ===)是否应该在JavaScript比较中使用?)。

您具有=赋值运算符,==是"等于"比较运算符,而===是"相同"比较运算符。

$a = $b     Assign      Sets $a to be equal to $b.

$a == $b    Equal       TRUE if $a is equal to $b.

$a === $b   Identical   TRUE if $a is equal to $b, and they are of the same type. (introduced in PHP 4)

有关==和===的需求以及使用每种情况的更多信息,请参阅文档。

当我比较两个相同的日期时间时,我得到了错误的结果,为什么?示例:sandbox.onlinephpfunctions.com/code/

@stloc,带有对象的===告诉您它们是否是同一对象,而不是它们是否具有相同的内容。

在PHP4中引入,在Y2018中很有趣;-)

=是赋值运算符

==

是比较运算符(检查是否

两个变量具有相等的值)

===是相同的比较

运算符(检查是否有两个变量

具有相等的值,并且具有相同的值

类型)。

=赋值运算符

==检查两个变量是否具有相同的值

===检查两个变量是否具有相同的值,以及它们的类型是否相同

也了解!=和!==而不是两个比较运算符的版本。有些语言使用:=作为赋值,只是为了避免这种混淆。

=运算符将值分配给变量

$ six = 6;值6分配给变量$ six

==运算符,检查两个变量的值是否相等,并且主要用于if语句之类的条件

$a = 2;

$b = 2;

if ($a == $b) {

echo both variables have the same value;

}

===类似于==的运算符(检查值是否相等),还检查两个数据类型是否相同

$a = 2;

$b ="2";

if ($a === $b) {

echo"both variable have same value and of same data type";

} else {

echo 'both variable is either not equal or not of same data type';

}

//这里$ a是int类型,而$ b是string类型。所以这里的输出

对于高级PHP用户,了解==和===之间的区别并问自己:"当我确定两个操作数是同一类型时,与==或与===进行比较会更快吗?"

简短而通用的答案是:在这种情况下,使用===不会提高性能,因此您可能应该使用==。

对于有兴趣对其进行基准测试的人,您可以使用我专门编写的以下代码,并尝试$a和$b的不同值:

// CONFIGURATION

$cycles = 1000000;

$a = 'random string 1';

$b = 'random string 2';

// FUNCTIONS

function compare_two_equals($a, $b) {

if ($a == $b) {

return TRUE;

} else {

return FALSE;

}

}

function compare_three_equals($a, $b) {

if ($a === $b) {

return TRUE;

} else {

return FALSE;

}

}

// EXECUTION

$time = microtime(TRUE);

for ($count_a = 0; $count_a < $cycles; $count_a++) {

compare_two_equals($a, $b);

}

$time_two_a = microtime(TRUE) - $time;

$time = microtime(TRUE);

for ($count_a = 0; $count_a < $cycles; $count_a++) {

compare_three_equals($a, $b);

}

$time_three_a = microtime(TRUE) - $time;

$time = microtime(TRUE);

for ($count_a = 0; $count_a < $cycles; $count_a++) {

compare_two_equals($a, $b);

}

$time_two_b = microtime(TRUE) - $time;

$time = microtime(TRUE);

for ($count_a = 0; $count_a < $cycles; $count_a++) {

compare_three_equals($a, $b);

}

$time_three_b = microtime(TRUE) - $time;

$time = microtime(TRUE);

// RESULTS PRINTING

print"

COMPARE == (FIRST TRY):" . number_format($time_two_a, 3) ." seconds";

print"

COMPARE == (SECOND TRY):" . number_format($time_two_b, 3) ." seconds";

print"

COMPARE === (FIRST TRY):" . number_format($time_three_a, 3) ." seconds";

print"

COMPARE === (SECOND TRY):" . number_format($time_three_b, 3) ." seconds";

?>

注意:仅当每个"第一尝试"非常接近其"第二尝试"时,该比较才有效。如果它们明显不同,则意味着处理器在执行比较时正忙于做其他事情,因此结果不可靠,应该重新运行基准测试。

这样的微基准并不是很可靠。您极不可能担心==或===作为性能问题的原因。 IMO:最好严格(===),除非您明确希望比较不严格(==)。奇怪的边缘情况(例如"5 is not a number" == 5)的数量可能会导致古怪的错误。 ===绝不会遇到此问题。

我的测试是告诉程序员,如果出于性能原因选择===,那他们错了。因此,程序员可以基于逻辑原因而不是基于性能原因自由选择===或==:在不同的情况下,一个或另一个更喜欢,并且根本不考虑性能。

php5.0相等,关于php:3个相等相关推荐

  1. 新版 apache_2.0.54 php-5.0.4 mysql-4.1.12a 组合安装向导(原创)

    最近配置APM安装中出现了一些问题,主要是版本更新后有些个别的配置变了.在网络上参考了一些安装说明,但是内容比较分散.因此在这里重新总结一下最近的这几个版本的配置方法. 首先,下载安装包,在此不赘述了 ...

  2. iis5.0+php5.0+mysql5.0配置完全手册_IIS5.0+PHP5.0+MySQL5.0配置完全手册

    IIS5.0+PHP5.0+MySQL5.0配置完全手册 环境: windows Xp sp2 IIS5.0 + MySQL 5.0 + PHP 5.0.4 + 使用PHPWind3.0论坛程序 使用 ...

  3. php5.4 curl,PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析

    本文实例分析了PHP5.0~5.6 各版本兼容性cURL文件上传功能.分享给大家供大家参考,具体如下: 最近做的一个需求,要通过PHP调用cURL,以multipart/form-data格式上传文件 ...

  4. php curl post 文件_php curl文件上传$_FILES为空,只有$_POST有值,如何兼容php5.0~5.6各版本...

    PHP 5.5以下用@,php5.5 @已被弃用,但勉强还能用,php5.6直接删除了@用法,必须得用new CURLFile(realpath('image.png'))这种方式才行了.关键我这还没 ...

  5. debian php安装pdo扩展,在debian下为PHP5.0.3安装pdo模块

    pdo作为下一个php的数据库统一接口,目前的版本是0.9,看来不久就可以release了,抢先尝鲜. 经过测试,pdo联结比adodb快3倍左右,和直接联结相差很小. 测试工具:AB 测试条件Apa ...

  6. php5.0 aes加解密,PHP的aes加解密算法

    说明: 1. php的aes算法,加密时会存在空格,0,\0等方式进行补长,所以解密后需要进行trim操作,才能得到原数据串 2. aes加密后进行base64_encode,但是解密时,直接用aes ...

  7. php5.0 cms安装教程,MySQL_KingCMS5.0从安装到设置使用教程,1.首先到KingCMS官方下载KingCMS5.0 - phpStudy...

    1.首先到KingCMS官方下载KingCMS5.0程序,下载地址http://www.kingcms.com/download/ 2.解压到本地目录,安装包内包括admin,page,templat ...

  8. think PHP5.0小程序,微信小程序ofo小黄车+thinkphp5.0打造全栈应用

    链接 简介 本项目是采用PHP语言,THINKPHP5.0框架开发的全栈应用系统.在开发这个项目时,微信还没有OFO微信小程序,又不想下载APP去使用,只能在支付宝上面使用OFO,偶然间发现某人写了一 ...

  9. 【php】php5.0以上,instanceof 用法

    1.instanceof php官网:http://php.net/manual/zh/language.operators.type.php 2.instanceof 用于确定一个 PHP 变量是否 ...

最新文章

  1. char 类型的数组转换到CSting
  2. OpenStack Neutron浅析(三)
  3. testNG入门详解
  4. python网页填表教程_PythonSpot 中文系列教程 · 翻译完成
  5. 程序员的圣诞节后-零
  6. ##CSP认证 201909-2小明种苹果(续)(100分)
  7. hdfs上的csv文件导入mysql表_HDFS、Hive、MySQL、Sqoop之间的数据导入导出(强烈建议去看)...
  8. java 中如何临时保存某输入值_java笔记临时存放
  9. eviews计算covar_covariance(eviews做协整检验步骤)
  10. SWF怎么转FLV格式?
  11. ROC曲线下面积为什么越大越好 (TPR FPR)
  12. Python实现自动通关别踩白块儿
  13. Who do you think is the best coder, and why?
  14. Maximo学习:创建表和应用程序
  15. Chrome浏览器对统一资源发出多个请求时,导致最多停止20s问题
  16. HTML5期末大作业:个人空间相册网页设计 (6页) HTML+CSS+JavaScript
  17. Arcgis使用自定义的图标库-地图POI图标风格
  18. 快速理解数据库超键,候选键,主键
  19. Greenplum Python专用库gppylib学习——base.py
  20. 97整数小波压缩的FPGA实现过程

热门文章

  1. 主流微服务注册中心浅析和对比
  2. 从工具到平台|默安科技研发安全一体化管理平台正式发布
  3. 开源巨头 SUSE 收购 Rancher Labs,云原生时代来临
  4. 看完这篇 HashMap ,和面试官扯皮就没问题了
  5. 架构师前辈告诉你:代码该如何才能自己写得容易,别人看得也不痛苦
  6. 如果你觉得 Git 很迷惑人,那么这份小抄正是为你准备的!
  7. K8S精华问答 | K8S和Openstack发展方向是怎样的?
  8. 我那么拼命,为什么还会被裁掉?
  9. 华为120hz鸿蒙系统,华为亮剑,120Hz+鸿蒙系统+5500mAh,竟然如此销魂
  10. ansible 修改文件变量_基于ansible的批量配置生成