关于php变量无类型的特性,我已经中了很多次招了,求神仙讲解一下

像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”);

Posted in 未分类