一道小题引出的php数据类型转换问题_PHP教程
程序员文章站
2022-05-03 20:31:14
...
题目如下:
[php]
$a = 3;
$b = 5;
$c = $a > $b ? 2:4;
echo $d = $a
/*analysis why the result is 1*/
echo $d;
echo gettype($d);
echo var_dump($d);
/*example 2*/
if('ABC'==0)
echo 'yes';
else
echo 'no';
/*example 3 the result $h=10,$g=10;*/
$h=+$g=10;
echo $h,"$g";
/*这里关乎运算符优先级*/
?>
对结果感到疑惑吧!?
php作为一种弱类型语言,是允许不同类型的数据进行混合运算的(类似 VbScript),PHP 解释引擎自动做了类型转换的工作。必须引起注意。
先来回忆一下手册里的PHP echo() 函数
定义和用法
echo() 函数输出一个或多个字符串。
语法
echo(strings)
参数 描述
strings 必需。一个或多个要发送到输出的字符串。
注释:注释:echo() 实际上不是一个函数,因此您无需对其使用括号。不过,如果您希望向 echo() 传递一个或多个参数,那么使用括号会发生解析错误。echo()函数可以用成 echo('...'),也可以用成 echo '...'。echo 的操作数类型应该是字符串型的。
详细用法参见http://www.w3school.com.cn/php/func_string_echo.asp
为了更好的理解php数据类型转换,搞清楚计算结果的复杂诡异,请记住以下几点:
1:注意 echo 和 print 函数的区别,比如:
1)、
echo "123" . print("abc"); //语法正确,但输出不是123abc,而是 abc1231
//原因是首先执行 print()函数输出 abc,再连接"123"和函数的返回值1
print "abc" . echo('ooo'); //echo('ooo')会导致 Parse error: syntax error
2)、echo() 函数可以使用简化语法。 = '...' ?>
例如:
[php]
$color = "red";
?>
Roses are =$color?>
3)、echo()函数 比 print() 函数快一点点。
接下来,需要熟悉一下点运算符的操作,这里以网友“张庆(网眼)”的例子示意:
示例1:
最一般的情况,输出字符串,比如 echo 'abc' . "123",结果是 abc123,没说明好解释的。
示例2:
echo true;
输出结果是 1。true 是 PHP 内置布尔常量,输出前被转换为字符串"1"。
echo false;
输出结果是空。false 也是 PHP 内置布尔常量,输出前被转换为空字符串。
示例3:
echo 0=="ABC";
输出结果是 1。0=="ABC"中,字符串"ABC"首先被转换为数值型(字符串转换为数值,还有一个规则,有机会再讲),为0,再和 0 比较,结果为 true,再执行 echo true,为 1。默默地进行了 2 次类型转换。
再注意,echo 'ABC'==0; 结果还是 1。注意不是把 0 转换为字符串 "0" 再和字符串 'ABC' 比较从而得到 false。呵呵,很诡异吗?
类似地有另一个题目:
if('ABC'==0)
echo 'yes';
else
echo 'no';
知道到底输出 yes 还是 no 了吗?
示例4:再来个更诡异的。
echo 100 . "ABC"; // 注意!点符号两边都有空格
这句输出 100ABC,因为 100 被转化为"100"了。
echo 100."ABC"; // 注意!点符号两边没有空格,是连写
但这句报告语法错误!为什么呀?因为 PHP 在这里把点符号当小数点对待了,“100."ABC"” 当然不是个正确的数字了。
echo 100. "ABC";
只有点符号右边有空格,语法错误。原因如上。
echo 100 ."ABC";
只有点符号左边有空格,语法正确,输出 100ABC。
类似的:
$a = 100;
echo $a . 200; //点符号两边有空格
输出 100200。
$a = 100;
echo $a.200; //点符号两边没有空格
语法错误。“$a.200”也不是一个合格的变量吧。
示例5:
echo 100 + "ABC";
输出结果是 100。注意不要认为这会产生语法错误,因为这里的“+”号是算数运算符,不是连接运算符的误写。"ABC"被转换为数字 0 了,加 100 后等于100,再转换为字符串"100"输出来。进行了2次类型转换。
echo 100 + "20" . 30; //点符号两边有空格
结果输出 12030。
echo 100 + "20" .30; //点符号左边有空格,右边无空格
语法错误。.30 被当作 double 类型的 0.30 了。与 100 + "20" 的结果"120"直接摆在一起,PHP 分辨不清,报错了。
还可以举出一些例子来。仔细体会,还是能找出类型转换规律的,PHP 其实并不诡异。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
上一篇: php中对象的序列化与反序列化
推荐阅读
-
PHP中数据类型转换的三种方式,数据类型三种方式_PHP教程
-
PHP utf-8和gb2312编码转换乱码的问题_PHP教程
-
php 中require和include引用url和 php的文件编码转换函数问题_PHP教程
-
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法_PHP教程
-
php中iconv编码转换来解决中文乱码的问题_PHP教程
-
PHP utf-8和gb2312编码转换乱码的问题_PHP教程
-
一道小题引出的php数据类型转换问题
-
php学习之数据类型之间的转换介绍_PHP教程
-
photoshop学习教程 php学习之数据类型之间的转换代码
-
一道小题引出的php数据类型转换问题_PHP教程
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论