如果您将数字与字符串进行比较,或者比较涉及
数字字符串,然后将每个字符串转换为数字,然后
数值进行比较。 Reference
现在检查
<?php
$key = 0;
if($key === 'monty' && $key === 'anil'){
echo 'Mackraja';
}else{
echo "Nothing";
}
?>
你会得到输出“Nothing”。
现在这些字符串的整数值为 0,你可以在这里观察到。
<?php
$a = 'monty';
echo (int)$a; //0
如何? / 为什么?
把这种情况从编程中稍微解释一下,有什么更好的方法可以发布,我正在尝试用我的方式向你解释这个概念。
如果您遇到同质性原则,它指出如果两个量的维度不同,则无法比较它们。
这里在编程中不能直接比较字符串和整数,需要转换成任意一个进行比较。
在 PHP 中,如果您阅读手册,您会注意到或者这是 PHP 的一个基本概念:-
PHP 不需要(或支持)变量中的显式类型定义
宣言;变量的类型由上下文决定
变量被使用。
对于比较运算符,当您甚至比较两个字符串(松散比较)时,它们将转换为整数然后进行比较您可以在参考页面 “与各种类型的比较”表上注意到它.
所以,我可以说比较运算符本身需要整数类型变量
comapre,这就是为什么两个运算符都与整数进行比较的原因。
$key = 2;
if($key == '2abc' || $key == 'abc2'){
echo '<br/>Mackraja';//outputs
}else{
echo '<br/>nothing';//does not output
}
现在,
$key = 200;
if($key == '2a2' ){
echo '<br/>' . $key . '== 2a2' . ' Equal';//does not output
}else{
echo '<br/>' . $key . '== 2a2' . ' Not Equal'; //outputs
}
和
$key = 200;
if($key == '2e2' || $key == 'abc2'){
echo '<br/>' . $key . '== 2e2' . ' Equal';//outputs Now it does not convert it to integer, it converts it to
}else{
echo '<br/>' . $key . '== 2e2' . " Not Equal";//does not output
}
现在
echo '<br/>'.'1E1'*1; //it outputs 10 why ??
echo '<br/>';
echo '<br/>1E1'*1; //it outputs 10 why ??
见下文:-
echo '<br/>cast to int 1E1 = ' . (int)1E1;//10
echo '<br/>Cast to int 1E2 = ' . (int)1E2;//100
//echo '<br />Cast to int 1A1 = ' . (int)1A1;//gives you error as can not be cast
//echo '<br />Cast to int 1A2 = ' . (int)1A2;//gives you error as can not be cast
echo '<br />Cast to int 1A1 = ' . (int)('1A1');//1
echo '<br />Cast to int 1A2 = ' . (int)('1A2');//1
echo '<br/>get int value 1E1 = ' . intval('1E1');//1
echo '<br/>get int value 1E2 = ' . intval('1E2');//1
echo '<br />get int value 1A1 = ' . intval('1A1');//1
echo '<br />get int value 1A2 = ' . intval('1A2');//1
“这不是关于从变量中获取整数值,而是关于
如何转换变量。”
我给你另一个干净的表,你已经从我之前的reference link 中看到过,比较不同类型的变量在 PHP 中是如何转换的,你可以从这里注意到。
如果您需要更多资源,最好的办法是获取源代码,它是如何编写的,您可以从中学到很多东西,PHP 小组可以更好地回答他们为什么这样做。
如果 PHP 不会隐式转换这些变量,你可能会在这种情况下得到无法比拟的东西,如果你想让你的 PHP 表现得像这样,你可以制作自己的版本。
我正在添加表格,当比较松散变量时如何发生转换:-