第3章 运算符和表达式

第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个数的最大值。

目录

相关文章

  • 张大良:着力推动高校加快现代信息技术与教育教学深度融合

    编者按:本文是教育部高等教育司张大良司长在2016年5月召开的基础课程教学改革研讨会上的讲话摘要。 原文刊登在《中国大学教学》2016年第7期,转载时有删节。 近年来,大规模在线开放课程(即慕课)等新型在线开放课程在世界范围迅速兴起,给高等教育教学改革发展带来了新的机遇和挑战。作为互联网与高等教育结合的产物,慕课的“开放”“共享”理念正在突破传统教育观念的束缚,有助于推进课程和教学内容、...

    825 0 0 0

推荐用户

人邮微信
本地服务
人邮微信
教师服务
二维码
读者服务
读者服务
返回顶部
返回顶部