上篇PHP语言有一个基本的了解(PHP从入门到精通—PHP开发入门-PHP概述、PHP开发环境搭建、PHP开发环境搭建、第一个PHP程序、PHP开发流程),下面了解进行PHP编程应该学习的基础知识,包括PHP基本语法、PHP变量、PHP常量、数据类型转换、流程控制语句等。
PHP基本语法
Ø PHP标记
PHP和其他Web语言一样,都是用一对标记将PHP代码包含起来,以便和HTML代码区分开来。PHP支持4种风格的标记,如表所示。
标记风格 开始标记 结束标记
XML风格 <?php ?>
简短风格 <? ?>
Script风格 <script language="php"> </script>
ASP风格 <% %>
在表中,每种标记风格都有各自的开始标记和结束标记。
1.XML风格
该风格的标记以“<?php”开始,以“?>”结束,具体示例如下:
XML风格是本书中采用的风格,也是推荐使用的风格。该风格的标记在XML、XHTML中都可以使用,服务器不可以禁用这种风格的标记。
2.简短风格
该风格的标记省略了XML风格中的“php”,具体示例如下:
如果需要使用简短风格,必须在配置文件php.ini中设置short_open_tags选项为On,然后重启Apache服务器。因为这种标记风格在许多环境中的默认设置是不支持的,因此本书不推荐使用这种标记风格。另外,如果脚本中包含XML语句,应禁止使用这种风格的标记。
3.Script风格
该风格的标记以“<script language="php">”开始,以“</script>”结束,具体示例如下:
该风格的标记类似于JavaScript语言的标记,该风格的标记不需要进行配置,一般不推荐使用该风格标记,此处只需了解即可。
4.ASP风格
该风格的标记以“<%”开始,以“%>”结束,具体示例如下:
如果需要使用这种风格标记,必须在配置文件php.ini中设置asp_tags选项为On,然后重启Apache服务器。因为这种标记风格在许多环境中的默认设置是不支持的,因此本书不推荐使用这种标记风格。
Ø PHP注释
注释即对程序代码的解释,在写程序时需适当使用注释,以方便自己和他人理解程序各部分的作用。在执行时,它会被PHP解释器忽略,因此不会影响程序的执行。PHP支持C++、C、Shell三种风格的注释。
1.C++风格的单行注释
该注释是从“//”开始,到该行末尾或PHP结束标记之前结束。
2.C风格的多行注释
该注释从“/*”开始,到“*/”结束。
3.Shell风格的单行注释
该注释是从“#”开始,到该行末尾或PHP结束标记之前结束。
但不可以嵌套多行注释,下面的代码是错误的用法,具体示例如下:
该注释是从“#”开始,到该行末尾或PHP结束标记之前结束,具体示例如下:
上面三种注释风格,大家可以根据需求选择合适风格的注释,并且需特别注意嵌套引起的错误。
此外,在PHP脚本中还可以使用多行文档注释(从“/**”开始,到“*/”结束),它能快速生成具有相互参照、索引等功能的API文档。由于初学阶段暂时用不到此种注释,此处只需了解即可。
PHP基本语法
Ø PHP标识符与关键字
在现实生活中,每种事物都有自己的名称,从而与其他事物区分开。例如,每种交通工具都用一个名称来标识,如图所示。
在PHP语言中,同样也需要对程序中各个元素命名加以区分,这种用来标识变量、函数、类等元素的符号称为标识符。
PHP语言规定,标识符是由字母、数字和下画线组成的,并且只能是以字母或下画线开头的字符集合。在使用标识符时应注意以下几点:
命名时应遵循见名知义的原则。
系统已用的关键字不得用作标识符。
关键字虽然可作为变量名使用,但容易造成混淆,不建议使用。
关键字是系统已经定义过的标识符,在程序中已有了特定的含义,如echo、class等,因此不能再使用关键字作为其他名称的标识符。
下表中列出了PHP中常用的关键字。
指出什么PHP中的标识符和关键字,以及在使用的标识符时应注意哪几个重要的点,PHP常用的关键字。
Ø PHP变量
讲解变量的定义、变量的数据类型、检测数据类型、可变变量、变量的引用赋值等关于PHP变量的内容。
Ø 变量的定义
在使用淘宝购物时,用户使用购物车来存储想购买的物品,等到所有的物品都挑选完成后,选择支付即可,如图所示。
在进行支付时,系统首先将每件物品的数据存储起来,再对这些数据进行累加。在PHP中,若要存储数据,就需要用到变量。变量可以理解为淘宝购物车中存储的物品,如苹果、水等。变量的赋值是通过=来表示的,进行支付时是每个变量值相加的过程,具体示例如下:
上述示例中, $apple和$water变量就好比购物车中存储的物品,它们存储的数据分别是20和7, $sum变量存储的数据是apple和water这两个物品的数据累计之和。
在PHP中,变量是由$和变量名组成的,并且变量的命名规则与标识符相同。此处需注意,变量名是区分大小写的,如$Apple与$apple是两个不同的变量。
Ø变量类型
在计算机中,操作的对象是数据,那么如何选择合适的容器来存放数据才不至于浪费空间?先来看一个生活中的例子,某公司要快递一本书,可以用文件袋和纸箱来装,但是,如果使用纸箱装一本书,显然有点大材小用,浪费纸箱的空间,如图所示。
同理,为了更充分利用内存空间,PHP可以为不同的数据指定不同的数据类型。PHP支持8种数据类型,如图所示。
在上图中,PHP的数据类型分为标量类型(boolean、integer、float、string)、复合类型(array、object)和特殊类型(resource、NULL)。本节只介绍标量类型,其他数据类型将在后面的章节中讲解。
1.boolean(布尔型)
布尔型是PHP中较常用的数据类型之一,该类型数据只能为true或false(true表示真,false表示假,这两个值是不区分大小写的),具体示例如下:
2.integer(整型)
整型表示存储的数据是整数,例如1、-1等。在计算机语言中,整型数据可以用二进制、八进制、十进制、十六进制表示,并且在前面加上+或-表示正整数或负整数。如果用二进制表示,数字前必须加上0b或0B;如果用八进制表示,数字前必须加上0;如果用十六进制表示,数字前必须加上0x或0X,具体示例如下:
二进制数是由0、1组成,每逢2进1位;八进制数是由0~7的数字序列组成,每逢8进1位;十六进制数是由0~9的数字和A~F的字母组成序列,每逢16进1位。此处需注意,整型数值有最大取值范围,它的范围与平台有关。
3.float(浮点型)
浮点型表示存储的数据是实数,它的取值范围也与平台有关。在PHP中,浮点型数据默认有两种书写格式,具体示例如下:
4.string(字符串型)
字符串是一系列的字符,例如上例中的"圆周率的书写格式:<br>"就是一个字符串。字符串可以使用单引号、双引号、定界符三种形式来定义。虽然三种形式都可以定义一个字符串,但它们却有本质的不同,接下来详细讲解这三种形式。
1)单引号形式
该形式就是将字符序列用单引号括起来。如果需要在字符串中表示一个单引号,则需要使用转义字符(\,也称反斜杠)转义。如果需要在字符串中表示反斜杠,则需要使用两个反斜杠。此外,单引号这种形式的字符串只能转义单引号和反斜杠。PHP中常见的转义字符如表所示。
2)双引号形式
该形式就是将字符序列用双引号括起来,可以转义一些字符,还可以将字符串的变量名替换为变量值(即可以解析其中包含的变量)。
3)定界符
字符串的另一种形式是使用定界符(<<<)。该形式在<<<之后提供一个标识符用来表示开始,然后是包含的字符串,最后是用同样的标识符表示结束字符串。注意,结束标识符必须从行的第一列开始,并且后面除了分号不能再包含其他任何字符。
定界符形式的字符串可以很容易定义较长的字符串,因此通常用于从文件或数据库中大段地输出文档。
在图中,PHP的数据类型分为标量类型(
boolean、integer、float、string)、复合类型(array、object)和特殊类型(resource、NULL)。
Ø 检测数据类型
在PHP中,变量的类型是由存储的数据决定的。为了检测变量所赋的值是否符合期望的数据类型,PHP中内置了一些检测数据类型的函数,如表所示。
函数 功能
is_bool() 检测变量是否为布尔型
is_int() 检测变量是否为整型
is_float() 检测变量是否为浮点型
is_string() 检测变量是否为字符串型
is_array() 检测变量是否为数组型
is_object() 检测变量是否为对象型
is_resource 检测变量是否为资源型
is_null() 检测变量是否为空值
is_numeric() 检测变量是否为数字或数字组成的字符串
在表中,若变量属于某个类型,则函数返回true,否则返回false。
Ø 可变变量
前面使用变量时,变量名是不可以更改的。如果想动态地设置和使用变量名,就需要使用可变变量,一个可变变量通过一个普通变量的值作为这个可变变量的变量名。
Ø 变量的引用赋值
前面使用的变量都是传值赋值,即当一个变量的值赋给另一个变量时,改变其中一个变量的值,将不会影响另一个变量的值。而引用赋值相当于给变量起了个别名,表示新变量引用原变量,如果一个变量改变,另一个变量也会随之改变。这就好比一个人有大名与小名之分,但都指同一人。使用引用赋值,需要将&添加到引用的变量前面。
PHP变量
常见的PHP继承开发环境
变量是指在程序执行过程中值可以变化的量,常量是指在程序执行过程中值不变的量,例如圆周率π就可以定义为常量。在PHP中,常量是通过define()函数来定义的,其语法格式如下:
该函数有三个参数,具体如表所示。
另外,mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。
获取常量的方法有两种:一种是直接使用常量名获取对应的值,另一种是使用constant()函数获取对应的值。
constant()函数的语法格式如下:
参数$name为需要获取常量的名称,也可以为存储常量名的变量。该函数调用成功,返回常量值,否则提示常量没有被定义。
defined()函数可以判断一个常量是否已定义,其语法格式如下:
参数$name为需要判断的常量名,若该常量已定义,则返回true,否则返回false。
Ø 常量的定义及获取
变量是指在程序执行过程中值可以变化的量,常量是指在程序执行过程中值不变的量,例如圆周率π就可以定义为常量。在PHP中,常量是通过define()函数来定义的,其语法格式如下:
bool define(string $name, mixed $value [, bool
$case_insensitive = false])
该函数有三个参数,具体如表所示。
参数 说明
$name 必选参数,指定常量名,即标识符
$value 必选参数,指定常量值,允许标量、NULL、array类型
$case_insensitive 可选参数,默认为false,表示大小写敏感,若设置为true,表示大小不敏感
另外,mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。
获取常量的方法有两种:一种是直接使用常量名获取对应的值,另一种是使用constant()函数获取对应的值。
constant()函数的语法格式如下:
mixed constant(string $name)
参数$name为需要获取常量的名称,也可以为存储常量名的变量。该函数调用成功,返回常量值,否则提示常量没有被定义。
defined()函数可以判断一个常量是否已定义,其语法格式如下:
bool defined(string $name)
参数$name为需要判断的常量名,若该常量已定义,则返回true,否则返回false。
Ø 预定义常量
预定义常量是指系统中已定义的常量,可以在程序中直接使用,具体如表所示。
常量名 说明
__FILE__ 当前文件路径
__LINE__ 当前所在行号
__FUNCTION__ 当前的函数名
__CLASS__ 当前的类名
__METHOD__ 当前对象的方法名
PHP_OS PHP运行的操作系统,如WINNT、UNIX
PHP_VERSION 当前PHP的版本号
TRUE 布尔值true
FALSE 布尔值false
NULL 空值null
E_ERROR 错误,导致PHP脚本终止运行
E_WARNING 警告,不会导致PHP脚本终止运行
E_PARSE 解析错误,由程序解析器报告
E_NOTICE 非关键的错误
Ø 数据类型转换
数据类型转换是指变量或值从一种数据类型转换为另一种数据类型。转换有两种方式:自动类型转换和强制类型转换。
Ø 自动类型转换
自动类型转换是指数据类型由PHP自动转换,使用时需注意以下几点:
1. 其他类型转换为布尔类型
当其他类型需要转换为布尔类型时,整型0、浮点型0.0、字符串型""与"0"、不包含任何元素的数组、不包含任何成员变量的对象、NULL会被转换为false,其他值被转换为true。
2. 布尔型转换为整型
当布尔型转换为整型时,true转换为整数1,false转换为整数0。
3. 字符串型转换为整型或浮点型
如果字符串是数字序列的字符,则转换为该数字,否则会出现警告。
4. 布尔型转换为字符串型
true转换为"1",false转换为""。
5. 整型或浮点型转换为字符串型
整型或浮点型数据的字面样式转换为字符串形式。
Ø 强制类型转换
强制类型转换是使用者手动将某个数据类型转换成目标数据类型,其中最简单的方法是在需要转换的变量前加上用圆括号括起来的目标类型,具体如所示。
转换操作符 说明 转换操作符 说明
(boolean) 转换成布尔型 (float) 转换成浮点型
(string) 转换成字符串型 (array) 转换成数组
(integer) 转换成整型 (object) 转换成对象
除了上述转换方式外,类型转换还可以通过函数intval()、floatval()、strval()和settype()实现,具体如表所示。
函数 说明
int intval (mixed $var [, int $base = 10 ]) 返回变量$var的integer数值
float floatval (mixed $var) 返回变量$var的float数值
string strval (mixed $var) 返回变量$var的string值
bool settype (mixed &$var , string $type) 将变量 var 的类型设置成 type
通过圆括号方式进行的强制类型转换和上表中前三种函数进行的强制类型转换都没有改变这些被转换变量的类型与值,它们仅仅是将转换得到的新类型数据赋给新的变量,但上表中的settype()函数可以将变量的本身类型转换为其他类型。