猿问

PHP 和使用 strcmp 函数的正确方法

我正在处理以下代码段。!== 0在第一个 if 条件中使用而即使第二个条件在不使用的情况下返回相同的结果有什么意义!== 0?


我正在关注一些在线教程并注意到大多数开发人员都在使用,!== 0但我无意中注意到我也得到了相同的结果,至少在这个特定示例中没有使用!== 0


<?php 

  

$name1 = "Geeks"; 

$name2 = "geeks"; 

  


if (strcmp($name1, $name2) !== 0) { 

    echo 'Strings are not equal'; 

else { 

    echo 'Strings are equal'; 


if (strcmp($name1, $name2)) { 

    echo 'Strings are not equal'; 

else { 

    echo 'Strings are equal'; 

?> 


富国沪深
浏览 115回答 1
1回答

当年话下

“===”和“!==”比较运算符断言两件事:值相等,并且这些值属于同一类型对您的问题“将 !== 与 strcmp 函数一起使用有什么意义”的简短回答只是“这是一种很好的做法”。这确实是具体关于 strcmp 的唯一原因,并且 != 在涉及该功能时会给您完全相同的结果。长答案如下:PHP 传统上是一种松散类型的语言。也就是说,数据类型并不是那么重要,PHP 会自动为您隐式转换类型。默认情况下它仍然这样做(尽管近年来已经添加了很多东西来改善这种情况)。例如,如果将字符串“1”添加到整数 1,PHP 会自动将字符串转换为整数并返回整数值 2。如果您尝试这样做,强类型语言将返回错误。另一个例子是 PHP 会将 0 转换为布尔值 false,并将任何其他非零值转换为布尔值 true。正是第二个示例导致某些 PHP 内置函数出现问题。例如,strpos() 函数。如果您查看strpos 的文档页面,您会在“返回值”部分看到一个很大的“警告”,指出“此函数可能返回布尔值 FALSE,但也可能返回一个计算结果为 FALSE 的非布尔值”。出于这个原因,它建议您使用“===”运算符来确保您获得了您期望的准确值和类型。所以“=== 0”表示在输入的开头找到了字符串,“=== false”表示没有找到字符串。如果你只是使用“== false”你就不会因此,开发人员养成了使用“===”和“!==”来测试相等性和类型的习惯。这是一个好习惯。由于 strcmp 总是返回一个整数,并且您总是将它与一个整数进行比较,因此没有隐式转换,因此不需要比较类型和相等性。
随时随地看视频慕课网APP
我要回答