PHP开发基础(1):PHP 点运算符(.)与数据类型转换的深入探讨
2010-05-06 20:44
671 查看
如果估计没错,在 PHP 语言中,使用最多的运算符号当数点运算符号“.”,使用最多的语句当数“echo”。不难理解,PHP 的目标就是生成超文本脚本,而超文本脚本就是由字符串组成的,所以 PHP 处理最多的数据当是字符串,因此连接字符串的点运算符和输出字符串的语句“echo”就被经常用到。
最常用的不一定是最熟悉的。当我们敲击 echo "...."; 语句输出运算结果的时候,有谁敢说自己已经对字符串、点符号了如指掌、运用自如了呢?
比如,语句 echo '100'; 和 echo 100; 输出的 html 代码结果都是 100,他们有什么不同?
再比如,语句 echo 100.200; 和 echo 100[空格].[空格]200; 输出结果一样吗?为什么?
……
1,了解 PHP 是一门“弱类型”的语言
每门计算机语言(我知道的将近20门语言中),都是有数据类型的,PHP 概莫能外。“弱类型”的语言不是说该语言没有数据类型,而是说它弱化或不强调数据类型,具体的说,就是变量在使用前不必声明数据类型,类型根据所赋值的类型来决定,同时也定义了变量本身。但 PHP 的函数和各种操作符(运算符)又是有变量和操作数类型要求的。所以,不可避免的,存在一个数据类型的自动转换问题。强类型的语言,比如 C、C++、Java、C#,不同类型的数据是不允许参与混合运算的,如果需要,必需通过一些方法(比如函数、类的方法)进行类型转换。但 PHP 是允许不同类型的数据进行混合运算的(类似 VbScript),PHP 解释引擎自动做了类型转换的工作。
2,了解 echo 的操作数
echo 实际上不是一个函数,而是一个语言结构,所以它可以用成 echo('...'),也可以用成 echo '...'。echo 的操作数类型应该是字符串型的。
参考 PHP 手册对 echo 的说明:
语法:echo(strings);
参数 strings 必需。
描述:一个或多个要发送到输出的字符串。
小知识1:注意 echo 和 print 函数的区别,比如:
echo "123" . print("abc"); //语法正确,但输出不是123abc,而是 abc1231
//原因是首先执行 print()函数输出 abc,再连接"123"和函数的返回值1
print "abc" . echo('ooo'); //echo('ooo')会导致 Parse error: syntax error
小知识2:echo 的简化语法 <?= '...' ?>
小知识3:echo() 比 print() 函数快一点点。
3,了解点运算符的操作数
点运算符的操作数是字符串 strings。
语法:strings . strings
4,点运算符(.)的深入了解
了解了前边的1、2、3,是不是就完全能正确应用字符串、echo、点运算符了呢?不尽然。熟悉语法和实际应用往往还是有距离的。再加上自动数据类型转换,导致了一定的复杂性。
示例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 其实并不诡异。
即使 PHP 的老鸟,以上的情况也未必能了如指掌,见过很多 PHPer,自认为路子很野,编程“立等可取”,其实仔细较真起来,知识结构就像一张蜘蛛网,网眼大得能穿过一头鲸鱼,根本谈不上自称体系。所以,还是需要虚心、静心,沉下来学点基础知识。AD:若愿意,来我的西安 PHP 教育培训中心一起学习、探讨。
作者:张庆(网眼) 西安 PHP 教育培训中心(QQ群:108017660) 2010-5-5
来自“网眼视界”:http://blog.why100000.com
“十万个为什么”电脑学习网:http://www.why100000.com
最常用的不一定是最熟悉的。当我们敲击 echo "...."; 语句输出运算结果的时候,有谁敢说自己已经对字符串、点符号了如指掌、运用自如了呢?
比如,语句 echo '100'; 和 echo 100; 输出的 html 代码结果都是 100,他们有什么不同?
再比如,语句 echo 100.200; 和 echo 100[空格].[空格]200; 输出结果一样吗?为什么?
……
1,了解 PHP 是一门“弱类型”的语言
每门计算机语言(我知道的将近20门语言中),都是有数据类型的,PHP 概莫能外。“弱类型”的语言不是说该语言没有数据类型,而是说它弱化或不强调数据类型,具体的说,就是变量在使用前不必声明数据类型,类型根据所赋值的类型来决定,同时也定义了变量本身。但 PHP 的函数和各种操作符(运算符)又是有变量和操作数类型要求的。所以,不可避免的,存在一个数据类型的自动转换问题。强类型的语言,比如 C、C++、Java、C#,不同类型的数据是不允许参与混合运算的,如果需要,必需通过一些方法(比如函数、类的方法)进行类型转换。但 PHP 是允许不同类型的数据进行混合运算的(类似 VbScript),PHP 解释引擎自动做了类型转换的工作。
2,了解 echo 的操作数
echo 实际上不是一个函数,而是一个语言结构,所以它可以用成 echo('...'),也可以用成 echo '...'。echo 的操作数类型应该是字符串型的。
参考 PHP 手册对 echo 的说明:
语法:echo(strings);
参数 strings 必需。
描述:一个或多个要发送到输出的字符串。
小知识1:注意 echo 和 print 函数的区别,比如:
echo "123" . print("abc"); //语法正确,但输出不是123abc,而是 abc1231
//原因是首先执行 print()函数输出 abc,再连接"123"和函数的返回值1
print "abc" . echo('ooo'); //echo('ooo')会导致 Parse error: syntax error
小知识2:echo 的简化语法 <?= '...' ?>
小知识3:echo() 比 print() 函数快一点点。
3,了解点运算符的操作数
点运算符的操作数是字符串 strings。
语法:strings . strings
4,点运算符(.)的深入了解
了解了前边的1、2、3,是不是就完全能正确应用字符串、echo、点运算符了呢?不尽然。熟悉语法和实际应用往往还是有距离的。再加上自动数据类型转换,导致了一定的复杂性。
示例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 其实并不诡异。
即使 PHP 的老鸟,以上的情况也未必能了如指掌,见过很多 PHPer,自认为路子很野,编程“立等可取”,其实仔细较真起来,知识结构就像一张蜘蛛网,网眼大得能穿过一头鲸鱼,根本谈不上自称体系。所以,还是需要虚心、静心,沉下来学点基础知识。AD:若愿意,来我的西安 PHP 教育培训中心一起学习、探讨。
作者:张庆(网眼) 西安 PHP 教育培训中心(QQ群:108017660) 2010-5-5
来自“网眼视界”:http://blog.why100000.com
“十万个为什么”电脑学习网:http://www.why100000.com
相关文章推荐
- PHP 点运算符(.)与数据类型转换的深入探讨
- PHP 点运算符(.)与数据类型转换的深入探讨
- PHP基础-数据类型和运算符
- 黑马程序员——ios开发基础之C语言数据类型、运算符与输入输出
- PHP自学之路-----PHP基础数据类型及运算符介绍
- 变量浮点型PHP自学之路-----PHP基础数据类型及运算符介绍
- PHP基础 数据类型 运算符
- Python基础 -- 01 Python的基础语法(数据类型、输入输出、运算符、数据类型转换、判断语句、循环语句)
- ABAP开发基础知识:7)数据类型的转换
- php总结2——php中的变量、数据类型及转换、运算符、流程控制中的分支结构
- java基础--JDK安装、环境变量配置、工具开发第一个程序、数据类型、运算符
- 2、C#基础整理(运算符、数据类型与转换、var关键字)
- PHP基础1-变量/数据类型/单引号双引号区别/运算符/内容输出
- PHP基础之数据类型10——类型转换的判别
- php基础语法(数据类型、运算符)
- php学习基础篇之数据类型转换、运算符、if 、switch 流程控制
- JAVA基础二(java中的注释、ava编程语法基础、java数据类型、数据类型的转换、变量、运算符、分支语句、循环语句)
- 一:PHP语言基础_数据类型_转换数据类型
- PHP基础——数据类型之间的相互转换
- 【知识整理】javascript基础语法总结(2)——数据类型转换和运算符