像c/c++,java这些强类型语言:
const char* v = ’20’;
const char* v2 = ’30’;
const char* v3 = v + v2; //这个是绝对不可能是50的.因为v,v2是字符串类型而不是数字,无法算术运算.
int v = 20;
int v2 = 30;
int v3 = v + v2; //这样子就是50.
但是,php的类型是无类型的,我理解中,php的解释器可以自动把一个变量当成正确的类型来用.例如
$v = ’20’;
$v2 = ’30’;
$v3 = $v + $v2; //这里是50了,因为php解释器自动把’20’,’30’转化为了数字.即变成20 + 30.
但是像以下代码,怎么就输出’111’了呢?说好的自动转换呢?
$b = ‘false’;
echo $b ? ‘111’ : ‘000’;
哪位大仙能给我讲讲php如此神奇的规则啊?
回复讨论(解决方案)
写php不需要安装php公司什么exe程序之类,直接随便一个记事本就可以写,在写完保存.php文件时当然也就无从检测你的代码类型语法等是否合规!
易语言 c++ dilphin这些程序语言不存在上面那种问题,因为你写这些语言必须用这些公司专门的exe程序来写啊,当然点保存时它就可以检测提示你的代码是否合格了! 虽然随便写起来方便了,但弊端就是上面这无法检测代码的绝对正确性!
后面 $b也是转了bool的, 任何一个长度大于0 且它本身不是===”0″; 的字符串 转成bool类型都是true
“0” false
“00” true
“0.0” true
0 false
00 false
0.0 false
这样写php认为不是true和非0数字即为真。
理解下三目运算符的使用方法,代码echo $b ? ‘111’ : ‘000’;相当于:
if($b){
echo “111”;
}else{
echo “000”;
}
你上面设置了$b的值,所以输出111,和自动转换没关系
你给的例子,把false当作字符串了
这个则会输出000
$b = false;
echo $b ? ‘111’ : ‘000’;
你给的例子,把false当作字符串了
这个则会输出000
$b = false;
echo $b ? ‘111’ : ‘000’;
非常赞同这个;
false加了引号,php会当做字符串来解析
1、与弱类型无关
echo 1 + 1; //2
echo ‘1’ + ‘1’; //2
echo 1 . 1; //11
+ 用于数值运算,. 用于字符串连接。分工严密,运算严谨
2、$b = ‘false’;
谁也不会眼拙到会认为一个长度为 5 的字符串是空串
1、与弱类型无关
echo 1 + 1; //2
echo ‘1’ + ‘1’; //2
echo 1 . 1; //11
+ 用于数值运算,. 用于字符串连接。分工严密,运算严谨
2、$b = ‘false’;
谁也不会眼拙到会认为一个长度为 5 的字符串是空串
—————————————————————————–
我就是不明白.
为什么
echo ‘111’ + ‘222’;
输出为333
明明’111’是长度为3的字符串.凭什么变成数字?
而
$b = ‘false’;
echo ($b ? ‘111’ : ‘000’);
这里长度为5的字符串,凭什么不变成bool类型?
+ 号用于数学运算,这是小学生都知道的事情,为什么到你就不理解了呢?
即使c++,也有重载的概念,你就把php字符串相加 当作c++运算符号重载吧。
php里字符串连接是用.的,正常字符串是不能和字符串相加的,php认为字符串相加是其从字符串开头的所有数字部分的数值作和。
$b = ‘false’;
echo $b ? ‘111’ : ‘000’;
输出111正常啊
‘false’ 不为空,所以是true ,输出111
要进行了运算才会转,正常使用是不会转的。
$b = ‘false’;
echo $b ? ‘111’ : ‘000’;
输出111正常啊
‘false’ 不为空,所以是true ,输出111
要进行了运算才会转,正常使用是不会转的。
我觉得吧.这应该是属于php的一个bug.只能死记硬背了.
如下代码:
$b = ‘false’;
if($b == false)
echo ’11’ . ”;
else
echo ’00’ . ”;
$b2 = ’12’;
if($b2 == 12)
echo ’11’ . ”;
else
echo ’00’ . ”;
输出的是
00
11
而不是
11
11
——————————–
只能死记硬背,php的字符串’false’,’true’,不能自动转化为布而类型.
而其他’0′,’0.12’能自动转化为整型,浮点型.
//这些都是false.
$b=null;
$b =”;
$b=’0′;
////这个就不是false.
$b=’false’;
嗯,不错
以下是一个个敲代码总结出来的,大家可以看看.
一.自动转换
1.转换为布尔型
null—————–false
“”——————-false
“0”——————false
“0.0”—————-true—————-注意
“true”—————true
“false”————–true—————-注意
0——————–false
0.0——————false
空数组—————false
资源—————–true
2.转换为数字
null—————–0
“”——————-0
“0”——————0
“0.0”—————-0
“true”—————0——————-注意
“false”————–0
true—————–1
false—————-0
非法的数字字符串—–0
3.转换为字符串
null—————–“”
true—————–1
false—————-“”
0——————–0
0.0——————0
数组—————–字符串数组
资源—————–resource id#数字
————————————————
二.强制转换
1.(int), (bool), (float), (string), (array), (object)
$n = (int)$b;
2.intval();floatval();strval();
$n = intval($b);
3.settype();
$n = settype($b, “int”);