第3章 运算符和表达式
运算符和表达式是一个程序的基础,也是PHP程序最重要的组成部分。本章将对PHP中的常量、变量以及运算符和表达式进行详细讲解。
本章要点
- PHP常量及预定义常量
- PHP变量
- PHP运算符及运算符的使用规则
- PHP数据类型的转换
3.1 常量
常量用于存储不经常改变的数据信息。常量的值被定义后,在程序的整个执行期间,这个值都有效,并且不可再次对该常量进行赋值。
使用define()函数声明常量
3.1.1 自定义常量
1.使用define()函数声明常量
在PHP中使用define()函数来定义常量,函数的语法如下。
define(string constant_name,mixed value,case_sensitive=true)
define函数的参数说明如表3-1所示。
表3-1 define函数的参数说明
参 数 |
说 明 |
---|---|
constant_name |
必选参数,常量名称,即标志符 |
value |
必选参数,常量的值 |
case_sensitive |
可选参数,指定是否大小写敏感,设定为true,表示不敏感 |
说明
mixed是指混合类型,它不单纯指一种类型,而是PHP对各种类型的一种通用表示形式。
2.使用constant()函数获取常量的值
获取指定常量的值和直接使用常量名输出的效果是一样的。但函数可以动态地输出不同的常量,在使用上要灵活、方便得多。constant()函数的语法如下。
使用constant()函数获取常量的值
mixed constant(string const_name)
参数const_name为要获取常量的名称。如果成功,则返回常量的值;如果失败,则提示错误信息常量没有被定义。
3.使用defined()函数判断常量是否已经被定义
defined()函数的语法如下。
使用defined()函数判断常量是否已经被定义
bool defined(string constant_name);
参数constant_name为要获取常量的名称,若成功,则返回true,否则返回false。
【例3-1】下面举一个例子,使用define()函数来定义名为MESSAGE的常量,使用constant()函数来获取该常量的值,最后使用defined()函数来判断常量是否已经被定义,代码如下。
<?php
/*使用define函数来定义名为MESSAGE的常量,并为其赋值“能看到一次”,然后分别输出常量MESSAGE和Message。因为没有设置Case_sensitive参数为true,所以表示大小写敏感,因此执行程序时,解释器会认为没有定义该常量而输出提示,并将Message作为普通字符串输出 */
define("MESSAGE",”能看到一次”);
echo MESSAGE;
echo Message;
/*使用define函数来定义名为COUNT的常量,并为其赋值“能看到多次”。设置Case_sensitive参数为true,表示大小写不敏感,分别输出常量COUNT和Count。因为设置了大小写不敏感,因此程序会认为它和COUNT是同一个常量,同样会输出值*/
define("COUNT",“能看到多次”,true);
echo "<br>";
echo COUNT;
echo "<br>";
echo Count;
echo "<br>";
echo constant("Count"); //使用constant函数来获取名为Count常量的值,并输出
echo "<br>"; //输出空行符
echo (defined("MESSAGE")); //判断MESSAGE常量是否已被赋值,如果已被赋值,输出“1”,如果未被赋值,则返回false
?>
运行结果如图3-1所示。
图3-1 常量的输出结果
说明
在运行本实例时,由于PHP环境配置的不同(php.ini中错误级别设置的不同),可能会出现不同的运行结果。图3-1中展示的是将php.ini文件中“error_reporting”的值设置为“E_ALL”后的结果。如果将“error_reporting”的值设置为“E_ALL & ~E_NOTICE”,那么将输出如图3-2所示的结果。
图3-2 常量的输出结果
3.1.2 预定义常量
PHP中提供了很多预定义常量,可以获取PHP中的信息,但不能任意更改这些常量的值。预定义常量的名称及其作用如表3-2所示。
预定义常量
表3-2 PHP中预定义常量
常 量 名 |
功 能 |
---|---|
__FILE__ |
默认常量,PHP程序的完整路径和文件名 |
__LINE__ |
默认常量,PHP程序行数 |
PHP_VERSION |
内建常量,PHP程序的版本,如“3.0.8_dev” |
PHP_OS |
内建常量,执行PHP解析器的操作系统名称,如“WINNT” |
TRUE |
这个常量是一个真值(true) |
FALSE |
这个常量是一个假值(false) |
NULL |
一个null值 |
E_ERROR |
这个常量指到最近的错误处 |
E_WARNING |
这个常量指到最近的警告处 |
E_PARSE |
这个常量指到解析语法有潜在问题处 |
E_NOTICE |
这个常量为发生不寻常,但不一定是错误处 |
说明
__FILE__和__LINE__中的“__”是2条下划线,而不是一条“_”。表中以E_开头的预定义常量是PHP的错误调试部分。如需详细了解,请参考error_reporting()函数。
【例3-2】 下面使用预定义常量来输出PHP中的一些信息,代码如下。
<?php
echo "当前文件路径为:".__FILE__; //使用__FILE__常量获取当前文件绝对路径
echo "<br>";
echo "当前行数为:".__LINE__; //使用__LINE__常量获取当前所在行数
echo "<br>";
echo "当前PHP版本信息为:".PHP_VERSION; //使用PHP_VERSION常量获取当前PHP版本
echo "<br>";
echo "当前操作系统为:".PHP_OS; //使用PHP_OS常量获取当前操作系统
?>
运行结果如图3-3所示。
图3-3 使用预定义常量获取PHP信息
3.2 变量
3.2.1 变量的概念
其值可以改变的量称为变量。变量为开发人员提供了一个有名字的内存存储区,程序中可以通过变量名对内存存储区进行读、写操作。为了确定每个变量内存存储区的大小,存储区中可以存放数据范围以及变量可以使用的运算符。系统为程序中的每一个变量分配一个存储单元,变量名实质上就是计算机内存单元的命名。因此,借助变量名就可以访问内存中的数据。
变量的概念
3.2.2 定义和使用变量
和很多语言不同,在PHP中使用变量之前不需要声明变量(PHP 4.0之前需要声明变量),只需为变量赋值即可。PHP中的变量名称用$和标识符表示,变量名是区分大小写的。
定义和使用变量
PHP中的变量名称遵循以下约定。
- 在PHP中的变量名是区分大小写的。
- 变量名必须以美元符号($)开始。
- 变量名开头可以以下划线开始。
- 变量名不能以数字字符开头。
- 变量名可以包含一些扩展字符(如重音拉丁字母),但不能包含非法扩展字符(如汉字字符和汉字字母)。
注意
声明的变量不可以与已有的变量重名,否则将引起冲突。变量的名称应采用能反映变量含义的名称,以利于提高程序的可读性。只要能明确反映变量的含义,可以使用英文单词、单词缩写、拼音(尽量使用英文单词),如$book_name、$user_age、$shop_price等。必要时,也可以将变量的类型包含在变量名中,如$book_id_int,这样可以直接根据变量名称了解变量的类型。
在程序中使用变量前,需要为变量赋值。PHP中变量的定义非常简单灵活。在定义变量时,不需要指定变量的类型,PHP自动根据对变量的赋值决定其类型。变量的赋值是通过使用赋值运算符“=”实现的。在定义变量时也可以直接为变量赋值,此时称为变量的初始化。
【例3-3】 下面的代码定义了一个整型变量n_sum,将其赋值为100;定义一个布尔型变量;定义一个空字符串。
<?php
$n_sum = 100; //定义一个整型变量,并进行初始化
$str1=false; //定义一个布尔型变量,并进行初始化
$str2=" "; //定义一个空字符串
?>
注意
在定义变量时,要养成良好的编程习惯,在定义变量前要对其定义初始值。如果在定义变量时没有指定变量的初始值,那么在使用变量时,PHP会根据变量在语句中所处的位置确定其类型,并采用该类型的默认值。字符串的初始值为空值;整型的初始值为0;布尔型的初始值为false。
对变量赋值时,要遵循变量命名规则,如下面的变量命名是合法的。
<?php
$helpsoft="PHP编程词典";
$_book="计算机图书";
?>
下面的变量命名则是非法的。
<?php
$5_str="编程词典"; //变量名不能以数字字符开头
$@zts ="zts"; //变量名不能以其他字符开头
?>
注意
PHP中的变量名称区分大小写,而函数名称不区分大小写。
3.2.3 变量的赋值方式
对变量进行赋值使用赋值运算符“=”实现。PHP中提供了3种赋值方式:直接赋值、传值赋值和引用赋值。
变量的赋值方式
1.直接赋值
直接赋值就是使用“=”直接将值赋给某变量,例如
<?php
$name="mingri";
$number=30;
echo $name;
echo $number;
?>
运行结果如下。
mingri
30
上例中分别定义了$name变量和$number变量,并分别为其赋值,然后使用echo输出语句输出变量的值。
2.传值赋值
传值赋值就是使用“=”将一个变量的值赋给另一个变量。
【例3-4】 变量间的赋值是指赋值后,2个变量使用各自的内存,互不干扰。实例代码如下。
<?php
$str1 = "PHP编程词典"; //声明变量$str1
$str2 = $str1; //使用$str1来初始化$str2
$str1 = "我喜欢学PHP"; //改变变量$str1的值
echo $str2; //输出变量$str2的值
?>
运行结果如下。
PHP编程词典
3.引用赋值
从PHP 4.0开始,PHP引入了“引用赋值”的概念。引用赋值是指用不同的名字访问同一个变量内容,当改变其中一个变量的值时,另一个也跟着发生变化。使用&符号来表示引用。
【例3-5】 本例中,变量$str2是变量$str的引用。当给变量$str赋值后,$str2的值也会跟着发生变化。实例代码如下。
<?php
$str = "学习PHP很轻松"; //声明变量$str
$str2 = & $str; //使用引用赋值,这时$str2已经赋值为"学习PHP很轻松"
$str = “我要大声的告诉你:$str"; //重新给$str赋值
echo $str2; //输出变量$str2
echo "<p>"; //输出换行标记
echo $str; //输出变量$str
?>
运行结果如图3-4所示。
图3-4 引用赋值
引用变量并不是复制一个变量给另一个变量,而是将两个变量指向同一个内容,可以理解为将同一个变量的地址传递给另一个变量。引用后,两个变量完全相同。当对其中的任意一个变量的内容进行更改时,另一个变量的内容也会随之更改。
引用和复制的区别在于,复制是将原变量内容复制下来,开辟一个新的内存空间来保存,而引用则是给变量的内容再命一个名字。也可以这样理解:一些论坛的版主、博客的博主,登录网站时发表帖子或文章时一般不会留真名,而是用笔名,这个笔名就可以看作一个引用,是其身份的代表。
3.2.4 可变变量
可变变量是一种独特的变量,变量的名称并不是预先定义好的,而是动态地设置和使用。可变变量一般是指使用一个变量的值作为另一个变量的名称,所以可变变量又称为变量的变量。可变变量通过在一个变量名称前使用两个“$”符号实现。
可变变量
【例3-6】 下面应用可变变量实现动态改变变量的名称。首先定义两个变量:$change_name和$php,并且输出变量$change_name的值,然后应用可变变量来改变变量$change_name的名称,最后输出改变名称后的变量值,程序代码如下。
<?php
$change_name = "php"; //声明变量$change_name
$php = "编程的关键因素在于学好语言基础!"; //声明变量$php
echo $change_name ; //输出变量$change_name
echo $$change_name ; //通过可变变量输出$php的值
?>
运行结果如下。
php编程的关键因素在于学好语言基础!
3.2.5 PHP预定义变量
PHP还提供了很多非常实用的预定义变量,通过这些预定义变量可以获取用户会话、用户操作系统的环境和本地操作系统的环境等信息。常用的预定义变量如表3-3所示。
PHP预定义变量
表3-3 预定义变量
变量的名称 |
说 明 |
---|---|
$_SERVER['SERVER_ADDR'] |
当前运行脚本所在的服务器的IP地址 |
$_SERVER['SERVER_NAME'] |
当前运行脚本所在服务器主机的名称。如果该脚本运行在一个虚拟主机上,则该名称由虚拟主机所设置的值决定 |
$_SERVER['REQUEST_METHOD'] |
访问页面时的请求方法,如GET、HEAD、POST、PUT等。如果请求的方式是HEAD,PHP脚本将在送出头信息后中止(这意味着在产生任何输出后,不再有输出缓冲) |
$_SERVER['REMOTE_ADDR'] |
正在浏览当前页面用户的IP地址 |
$_SERVER['REMOTE_HOST'] |
正在浏览当前页面用户的主机名。反向域名解析基于该用户的REMOTE_ADDR |
$_SERVER['REMOTE_PORT'] |
用户连接到服务器时所使用的端口 |
$_SERVER['SCRIPT_FILENAME'] |
当前执行脚本的绝对路径名。注意:如果脚本在CLI中被执行,作为相对路径,如file.php或者.../file.php,$_SERVER['SCRIPT_FILENAME']将包含用户指定的相对路径 |
$_SERVER['SERVER_PORT'] |
服务器所使用的端口,默认为80。如果使用SSL安全连接,则这个值为用户设置的HTTP端口 |
$_SERVER['SERVER_SIGNATURE'] |
包含服务器版本和虚拟主机名的字符串 |
$_SERVER['DOCUMENT_ROOT'] |
当前运行脚本所在的文档根目录,在服务器配置文件中定义 |
$_COOKIE |
通过HTTPCookie传递到脚本的信息。这些cookie多数是由执行PHP脚本时通过setcookie()函数设置的 |
$_SESSION |
包含与所有会话变量有关的信息。$_SESSION变量主要应用于会话控制和页面之间值的传递 |
$_POST |
包含通过POST方法传递的参数的相关信息,主要用于获取通过POST方法提交的数据 |
$_GET |
包含通过GET方法传递的参数的相关信息,主要用于获取通过GET方法提交的数据 |
$GLOBALS |
由所有已定义全局变量组成的数组。变量名就是该数组的索引。它可以称得上是所有超级变量的超级集合 |
3.3 PHP运算符
运算符是用来对变量、常量或数据进行计算的符号。它对一个值或一组值执行一个指定的操作。PHP运算符包括字符串运算符、算术运算符、赋值运算符、递增或递减运算符、位运算符、逻辑运算符、比较运算符和条件运算符。
算术运算符
3.3.1 算术运算符
算术运算(Arithmetic Operators)符号是处理四则运算的符号,在对数字的处理中应用得最多。常用的算术运算符如表3-4所示。
表3-4 常用的算术运算符
名 称 |
操 作 符 |
实 例 |
---|---|---|
加法运算 |
+ |
$a + $b |
减法运算 |
- |
$a-$b |
乘法运算 |
* |
$a * $b |
除法运算 |
/ |
$a / $b |
取余数运算 |
% |
$a % $b |
说明
在算术运算符中使用“%”求余,如果被除数($a)是负数的话,那么取得的结果也是一个负值。
【例3-7】 下面分别应用上述5种运算符进行运算并分别输出结果。
本实例代码如下。
<font color='blue'face='楷体_gb2312'>
<?php
$a = -100; //定义整型变量
$b = 50;
$c = 30;
echo "\$a = ".$a.","; //由于$在PHP中属于特殊符号,需要使用\转义
echo "\$b = ".$b.",";
echo "\$c = ".$c."<p>";
echo "\$a + \$b = ".($a + $b)."<p>"; //加法运算
echo "\$a - \$b = ".($a - $b)."<p>";; //减法运算
echo "\$a * \$b = ".($a * $b)."<p>"; //乘法运算
echo "\$a / \$b = ".($a / $b)."<p>"; //除法运算
echo "\$a % \$c = ".($a % $c)."<p>"; //取余运算
?>
</font>
运行结果如图3-5所示。
图3-5 算术运算符的简单应用
3.3.2 字符串运算符
字符串运算符只有一个,即英文的句号“.”。它将两个或多个字符串连接起来,结合到一起形成一个新的字符串。PHP中的“+”号只做赋值运算符使用,而不能做字符串运算符。
字符串运算符
【例3-8】 下面通过实例来体会“.”和“+”之间的区别。当使用“.”时,变量$m和$n两个字符串组成一个新的字符串;当使用“+”时,PHP会认为这是一次算术运算。如果“+”号的两边有字符类型,则自动转换为整型;如果是字母,则输出为0;如果是以数字开头的字符串,则会截取字符串头部的数字部分,再进行运算。
本实例代码如下。
<?php
$m = "520abc";
$n = 1;
$mn = $m.$n;
echo $mn."<br>";
$nm = $m + $n;
echo $nm . "<br>";
?>
运行结果如下。
520abc1
521
3.3.3 赋值运算符
赋值运算符主要用于处理表达式的赋值操作。PHP中常用的赋值运算符如表3-5所示。
赋值运算符
表3-5 PHP中常用的赋值运算符
操 作 |
符 号 |
实 例 |
展 开 形 式 |
意 义 |
---|---|---|---|---|
赋值 |
= |
$a=$b |
$a=$b |
将右边的值赋给左边 |
加 |
+= |
$a+=$b |
$a=$a+$b |
将右边的值加到左边 |
减 |
-= |
$a-=$b |
$a=$a-$b |
将右边的值减到左边 |
乘 |
*= |
$a*=$b |
$a=$a*$b |
将左边的值乘以右边 |
除 |
/= |
$a/=$b |
$a=$a/$b |
将左边的值除以右边 |
连接字符 |
.= |
$a.=$b |
$a=$a.$b |
将右边的字符加到左边 |
取余数 |
%= |
$a%=$b |
$a=$a%$b |
将左边的值对右边取余数 |
【例3-9】 应用赋值运算符给指定的变量赋值,并计算各表达式的值,代码如下。
<?php
$a = 10; //声明变量$a
$b = 8; //声明变量$b
echo "\$a = “.$a."<br>"; //输出变量$a
echo "\$b = “.$b."<br>"; //输出变量$b
echo "\$a += \$b = ".($a += $b)."<br>"; //计算变量$a加$b的值
echo "\$a -= \$b = ".($a -= $b)."<br>"; //计算变量$a减$b的值
echo "\$a *= \$b = ".($a *= $b)."<br>"; //计算$a乘以$b的值
echo "\$a /= \$b = ".($a /= $b)."<br>"; //计算$a除以$b的值
echo "\$a %= \$b = ".($a %= $b); //计算$a和$b的余数
?>
运行结果如图3-6所示。
图3-6 赋值运算符的应用
3.3.4 位运算符
位运算符是指对二进制位从低位到高位对齐后进行运算。PHP中的位运算符如表3-6所示。
位运算符
表3-6 PHP中的位运算符
符 号 |
作 用 |
实 例 |
---|---|---|
& |
按位与 |
$m & $n |
| |
按位或 |
$m | $n |
^ |
按位异或 |
$m ^ $n |
~ |
按位取反 |
$m ~ $n |
<< |
向左移位 |
$m << $n |
>> |
向右移位 |
$m >> $n |
【例3-10】 下面应用位运算符对变量中的值进行位运算。
本实例代码如下。
<?php
$m = 6 ; //运算时将6转换为二进制码110
$n = 12 ; //运算时将12转换为二进制码1100
$mn = $m & $n ; //做与操作后转换为十进制
echo $mn ."<br>" ;
$mn = $m | $n ; //做或操作后转换为十进制
echo $mn ."<br>" ;
$mn = $m ^ $n ; //做异或操作后转换为十进制
echo $mn ."<br>" ;
$mn = ~$m ; //做非操作后转换为十进制
echo $mn ."<br>";
?>
运行结果如图3-7所示。
图3-7 位运算符的应用
3.3.5 递增或递减运算符
算术运算符适合在有两个或者两个以上不同操作数的场合使用。只有一个操作数时,使用算术运算符是没有必要的。这时,就可以使用递增运算符“++”或者递减运算符“--”。
递增或递减运算符
递增或递减运算符有两种使用方法。一种是将运算符放在变量前面,即先将变量做加1或减1的运算,再将值赋给原变量,叫作前置递增或递减运算符;另一种是将运算符放在变量后面,即先返回变量的当前值,然后变量的当前值做加1或减1的运算,叫作后置递增或递减运算符。
【例3-11】 定义两个变量,将这两个变量分别利用递增和递减运算符进行操作,并输出结果。
实例代码如下。
<?PHP
$a = 6;
$b = 9;
echo "\$a = $a , \$b = $b<p>";
echo "\$a++ = " . $a++ .”<br>" ; //先返回$a的当前值,然后$a的当前值加1
echo “运算后\$a的值: ".$a."<p>" ;
echo "++\$b = " . ++$b ."<br>" ; //$b的当前值先加1,然后返回新值
echo “运算后\$b的值: ".$b ;
echo "<hr><p>";
echo "\$a-- = " . $a-- ."<br>" ; //先返回$n的当前值,然后$n的当前值减1
echo “运算后\$a的值: ".$a."<p>" ;
echo "\$b = " . --$b ."<br>"; //$n的当前值先减1,然后返回新值
echo “运算后\$b的值: ".$b;
?>
运行结果如图3-8所示。
图3-8 递增或递减运算符的应用
3.3.6 逻辑运算符
逻辑运算符用来处理逻辑运算操作,是程序设计中一组非常重要的运算符。PHP中的逻辑运算符如表3-7所示。
逻辑运算符
表3-7 PHP中的逻辑运算符
运 算 符 |
实 例 |
结 果 为 真 |
---|---|---|
&&或and(逻辑与) |
$m and $n |
当$m和$n都为真时 |
‖或or(逻辑或) |
$m ‖ $n |
当$m为真或者$n为真时 |
xor(逻辑异或) |
$m xor $n |
当$m、$n一真一假时 |
!(逻辑非) |
!$m |
当$m为假时 |
在逻辑运算符中,逻辑与和逻辑或这两个运算符有4种运算符号(&&、and和‖、or),其中属于同一个逻辑结构的两个运算符号(如&&和and)之间却有着不同的优先级。
【例3-12】 下面分别应用逻辑或中的运算符号“‖”和“or”与逻辑与运算符“and”进行逻辑运算,但是因为同一逻辑结构的两个运算符(“‖”和“or”)的优先级不同,输出的结果也不同。
实例代码如下。
<?php
$a = true;
$b = true;
$c = false;
if($a or $b and $c) //使用or运算符做逻辑判断
echo "true";
else
echo "false";
echo "<br>";
if($a || $b and $c) //使用||运算符做逻辑判断
echo "true";
else
echo "false";
?>
运行结果如图3-9所示。
图3-9 逻辑运算符
说明
可以看到,两个if语句除了or和||不同之外,其他完全一样,但最后的结果却正好相反。
3.3.7 比较运算符
比较运算符就是对变量或表达式的值进行大小、真假等比较,如果比较结果为真,则返回true,如果比较结果为假,则返回false。PHP中的比较运算符如表3-8所示。
比较运算符
表3-8 PHP中的比较运算符
运 算 符 |
实 例 |
结 果 为 真 |
---|---|---|
< |
小于 |
$m<$n |
> |
大于 |
$m>$n |
<= |
小于等于 |
$m<=$n |
>= |
大于等于 |
$m>=$n |
== |
相等 |
$m==$n |
!= |
不等 |
$m!=$n |
=== |
恒等 |
$m=== $n |
!== |
非恒等 |
$m!==$n |
这里面不太常见的是===和!==。$a === $b,说明$a和$b两个变量不但数值上相等,而且类型也一样。$a !== $b,说明$a和$b或者数值不等,或者类型不同。
【例3-13】 设置字符串型变量$value =“100”,通过不同的比较运算符将变量$value与数字100进行比较,再应用var_dump函数输出比较结果。其中使用的var_dump函数是系统函数,作用是输出变量的相关信息。
本实例代码如下。
<?PHP
$value="100"; //定义变量
echo "\$value = \"$value\" ";
echo "<p>\$value==100: ";
var_dump($value==100); //结果为bool(true)
echo "<p>\$value==true:";
var_dump($value==true); //结果为bool(true)
echo "<p>\$value!=null:";
var_dump($value!=null); //结果为bool(true)
echo "<p>\$value==false:";
var_dump($value==false); //结果为bool(false)
echo "<p>\$value === 100:";
var_dump($value===100); //结果为bool(false)
echo "<p>\$value===true:";
var_dump($value===true); //结果为bool(true)
echo "<p>(10/2.0 !== 5):";
var_dump(10/2.0 !==5); //结果为bool(true)
?>
运行结果如图3-10所示。
图3-10 比较运算符的应用
3.3.8 条件运算符
条件运算符可以提供简单的逻辑判断,其语法格式如下。
条件运算符
表达式1?表达式2:表达式3
如果表达式1的值为true,则执行表达式2,否则执行表达式3。
【例3-14】 下面应用条件运算符实现一个简单的判断功能。如果正确,则输出“表达式正确”,否则输出“表达式不正确”。
本实例代码如下。
<?php
$value=100;
echo ($value==true)?“表达式正确”:“表达式不正确”;
?>
运行结果如下。
表达式正确
3.3.9 运算符优先级
运算符的优先级,是指在程序中哪一个运算符先计算,哪一个后计算,与数学的四则运算遵循的“先乘除,后加减”是一个道理。
运算符优先级
PHP的运算符在运算中遵循的规则是优先级高的先进行运算,优先级低的后进行运算,同一优先级的操作按照从左到右的顺序进行。也可以像四则运算那样使用小括号,括号内的运算最先进行。PHP运算符优先级如表3-9所示。
表3-9 PHP运算符的优先级
优先级别(从低到高) |
运 算 符 |
---|---|
1 |
or,and,xor |
2 |
赋值运算符 |
3 |
?: |
4 |
||,&& |
5 |
|,^ |
6 |
& |
7 |
==,!=,===,!== |
8 |
<,<=,>,>= |
9 |
<<,>> |
10 |
+,-,. |
11 |
*,/,% |
12 |
!,~ |
13 |
++,-- |
这么多的级别,要想都记住是不太现实的,也没有这个必要。如果写的表达式真的很复杂,而且包含较多的运算符,不妨多加点()。例如
$a and (($b != $c) or (5 * (50 - $d)))
这样就会减少出现逻辑错误的可能。
3.4 表达式
将运算符和操作数连接起来的式子称为表达式。表达式是构成PHP程序语言的基本元素,也是PHP最重要的组成元素。根据运算符的不同,表达式可以分为算术表达式、字符串表达式、关系表达式、赋值表达式以及逻辑表达式等。
表达式
在PHP语言中,几乎所写的任何语句都是表达式。最基本的表达式形式是常量和变量,如“$a = 8”,即表示将值8赋给变量$a。
表达式是通过具体的代码来实现的,是多个符号集合起来组成的代码,而这些符号只是一些对PHP解释程序有具体含义的最小单元。它们可以是变量名、函数名、运算符、字符串、数值和括号等,如下面的代码。
<?php
$a = 8;
$b = "php" ;
?>
这是由两个表达式组成的脚本,即“$a = 8"和"$b = "php"”。此外,还可以进行连续赋值,例如
<?php
$b = $a = 8;
?>
因为PHP赋值操作的顺序是由右到左,所以变量$b和$a都被赋值8。
在PHP的代码中,使用分号“;”来区分表达式,表达式也可以包含在括号内。可以这样理解:一个表达式再加上一个分号,就是一条PHP语句。
表达式的应用范围非常广泛,可以调用一个数组、创建一个类、给变量赋值等。
注意
在编写程序时,应该注意表达式后面的这个分号“;”,不要漏写。这是一个出现频率很高的错误点。
3.5 数据类型的转换
3.5.1 自动转换
数据类型的自动转换是指在定义常量或变量时,不需要指定常量或变量的数据类型。在代码执行过程中,PHP会根据需要将常量或变量转换为合适的数据类型,但是在转换时也要遵循一定的规则。下面介绍几种数据类型之间的转换规则。
自动转换
- 布尔型数据和数值型数据在进行算术运算时,True被转换为整数1,False被转换为整数0。
- 字符串型数据和数值型数据在进行算术运算时,如果字符串以数字开头,将被转换为相应的数字;如果字符串不是以数字开头,将被转换为整数0。
- 在进行字符串连接运算时,整数、浮点数将被转换为字符串型数据,布尔值True将被转换为字符串“1”,布尔值False和Null将被转换为空字符串“ ”。
- 在进行逻辑运算时,整数0、浮点数0.0、空字符串“ ”、字符串“0”、Null以及空数组将被转换为布尔值False,其他数据将被转换为布尔值True。
【例3-15】 下面是一个PHP自动类型转换的例子,对不同类型的数据进行不同的运算。
本实例代码如下。
<?php
$a = true; //声明变量
$b = false; //声明变量
$c = "100abc"; //声明变量
$d = "abc100"; //声明变量
$e = 100; //声明变量
$f = 0; //声明变量
var_dump($a + $e); //输出表达式的结果
echo("<br>"); //输出换行标记
var_dump($b + $e); //输出表达式的结果
echo("<br>"); //输出换行标记
var_dump($c + $e); //输出表达式的结果
echo("<br>"); //输出换行标记
var_dump($d + $e); //输出表达式的结果
echo("<br>"); //输出换行标记
var_dump($a.$e); //输出表达式的结果
echo("<br>"); //输出换行标记
var_dump($a && $e); //输出表达式的结果
?>
运行结果如图3-11所示。
图3-11 PHP自动类型转换
说明
通过var_dump()函数可以输出数据的值、类型以及字符串的长度。
3.5.2 强制转换
1.应用括号括起来的类型名称进行转换
虽然PHP是弱类型语言,但有时仍然需要用到类型转换。PHP中的数据类型转换非常简单,在变量前加上用括号括起来的类型名称即可。PHP中允许转换的类型如表3-10所示。
应用括号括起来的类型名称进行转换
表3-10 PHP中允许转换的类型
转换操作符 |
转 换 类 型 |
举 例 |
---|---|---|
(boolean),(bool) |
转换成布尔型 |
(boolean)$num、(bool)$str |
(string) |
转换成字符型 |
(string)$flo |
(integer),(int) |
转换成整型 |
(integer)$boo、(int)$str |
(float),(double),(real) |
转换成浮点型 |
(float)$str、(double)$str |
(array) |
转换成数组 |
(array)$str |
(object) |
转换成对象 |
(object)$str |
【例3-16】 下面将一个字符串型变量分别转换成其他数据类型。
本实例关键代码如下。
<?PHP
$str = "Hello,I like PHP!";
echo “这是原始的string形式:".$str;
echo "<p>";
echo "这是boolean形式:".(boolean)$str;
echo "<p>";
echo “这是integer形式:".(integer)$str;
echo "<p>";
echo "这是float形式:".(float)$str;
echo "<p>";
echo "这是array形式:".(array)$str;
?>
运行结果如图3-12所示。
图3-12 将指定字符串型转换成其他类型
注意
在进行类型转换的过程中应该注意,转换成boolean型时,null、0和未赋值的变量或数组会被转换为false,其他的为真;转换成整型时,布尔型的false转换为0,true转换为1,浮点型的小数部分被舍去,字符型如果以数字开头,就截取到非数字位,否则输出0。
2.使用以val结尾的函数
常用的函数有intval()、floatval()、strval()。其语法格式和返回值如表3-11所示。
使用以val结尾的函数
表3-11 以val结尾的函数的语法格式和返回值
函数名 |
语法格式 |
返回值 |
---|---|---|
intval |
int intval(mixed var) |
返回var的整数值 |
floatval |
float floatval(mixed var) |
返回var的浮点数值 |
strval |
string strval(mixed var) |
返回var的字符串值 |
【例3-17】 下面将一个字符串型变量使用以val结尾的函数进行转换。
本实例关键代码如下。
<?PHP
$str = “123.456abc”; //声明变量
$int = intval($str); //声明变量
$flo = floatval($str); //声明变量
$str = strval($str); //声明变量
var_dump($int); //输出整数值
echo("<br>"); //输出换行标记
var_dump($flo); //输出浮点数值
echo("<br>"); //输出换行标记
var_dump($str); //输出字符串值
?>
运行结果如图3-13所示。
图3-13 使用以val结尾的函数进行转换
3.使用settype()函数
类型转换还可以通过settype()函数来完成,该函数可以将指定的变量转换成指定的数据类型。
使用settype()函数
bool settype ( mixed var,string type )
- 参数var为指定的变量。
- 参数type为指定的类型,有7个可选值:boolean、float、integer、array、null、object和string。如果转换成功,则返回true,否则返回false。
注意
使用settype()函数设置变量数据类型时,变量本身的数据类型将会发生变化。
【例3-18】 使用settype()函数对变量进行不同类型的转换,实例代码如下。
<?PHP
$str = "123.456abc"; //声明变量
$int = 100; //声明变量
$boo = true; //声明变量
settype($str,"integer"); //对变量类型进行转换
var_dump($str); //输出转换结果
echo "<br>"; //输出换行标记
settype($int,"boolean"); //对变量类型进行转换
var_dump($int); //输出转换结果
echo "<br>"; //输出换行标记
settype($boo,"string"); //对变量类型进行转换
var_dump($boo); //输出转换结果
?>
运行结果如图3-14所示。
图3-14 使用settype()函数进行转换
小结
本章主要介绍了PHP语言的基础知识,包括常量、变量、运算符和表达式,并详细介绍了各种类型之间的转换、系统预定义的常量和变量。基础知识是一门语言的核心,希望初学者能静下心来,牢牢掌握本章的知识,这样对以后的学习能起到事半功倍的效果。
上机指导
已知长方形的长和宽,根据长方形面积公式,应用算术运算符计算出长方形的面积。运行结果如图3-15所示。
图3-15 计算长方形的面积
(1)声明两个变量,分别表示长方形的长与宽。
(2)根据长方形的面积公式,应用算术运算符将长方形的长与宽做乘法运算。
(3)利用echo语句输出计算结果。
实现的具体代码如下。
<?php
$L=4.3;
$H=5.5;
$M=$L*$H;
echo “长方形的面积为”.$M.“平方米”;
?>
习题
3-1 如何定义常量及获取常量的值?
3-2 “===”是什么运算符?举例说明该运算符与“==”运算符在使用上有什么区别。
3-3 任意指定3个数,写程序求出3个数的最大值。