PHP语法基础
学习目标/Target
掌握PHP标记、标识符、输出语句的使用,能够熟练编写简单的PHP程序
熟悉注释和关键字的使用,能够在程序中正确使用注释和关键字
掌握变量、常量和表达式的使用,能够在程序中正确使用变量、常量和表达式
掌握数据类型和运算符的使用,能够使用不同的数据类型和运算符来操作数据
掌握分支结构、循环结构的使用,能够实现条件判断和循环操作
掌握循环嵌套的使用,能够通过循环嵌套处理复杂的程序逻辑
掌握跳转语句的使用,能够在循环结构中正确使用跳转语句
熟悉流程控制替代语句的语法,能够在程序中正确使用流程控制替代语句
掌握文件包含语句的使用,能够根据需求使用不同的文件包含语句
学习一门语言就像盖大楼一样,要想盖一幢安全、稳固的大楼,必须要有一个夯实的地基。同样的道理,要想熟练使用PHP语言进行网站开发,必须先对PHP的语法基础进行学习。本章将对PHP的基本语法、变量、常量、表达式、数据类型、运算符、流程控制和文件包含语句进行详细讲解。
目录
目录
基本语法
1.1PHP标记
在使用PHP进行开发时,一般先编写一个简单的HTML网页,然后将PHP代码嵌入到HTML中。为了区分HTML与PHP代码,需要使用PHP标记对PHP代码进行标识。
PHP 7支持标准标记()和短标记( ?>)
标准标记
如果一个PHP脚本中只包含PHP代码,不包含其他内容,则开始标记建议顶格书写,防止输出结果中出现不必要的空白字符,并且结束标记可以省略。
短标记
短标记以“”开始,以“?>”结束。在使用短标记前,需要将php.ini中的short_open_tag配置项设置为On,开启短标记功能后才可使用。
注意
若PHP脚本中含有XML语句,应避免使用短标记( ?>)。如果PHP脚本中包含XML语句并使用了短标记,PHP解析器可能会混淆XML处理指令和PHP短标记。
Hello HTML
// 是PHP代码的结束标记。//echo 用于输出字符串。//'Hello, PHP' 是要输出的字符串。
1.2 注释
略
1.3 输出语句
在开发中,当需要将变量的值或各种类型的数据输出到网页中时,可用使用输出语句。 PHP提供了一系列的输出语句,常用的如下。
echo
echo用于输出字符串,如果输出其他类型的数据会自动转换成字符串,当输出多个数据时使用逗号“,”分隔。
echo 'true';// 方式1,输出结果:trueecho 'result=', 4;// 方式2,输出结果:result=4 注意//echo不适合数组和对象,数组和对象推荐print_r() var_dump()
print与echo的用法类似,区别在于print只能输出一个数据。
print '生命在于运动!'; // 输出结果:生命在于运动!
print_r()
print_r()可以输出任意类型的数据,如字符串、数组等。
print_r('hello');// 输出结果:hello
var_dump()
var_dump()不仅可以输出一个或多个任意类型的数据,还可以获取数据的类型和元素值。
var_dump(2);// 输出结果:int(2) var_dump('PHP', 'C');// 输出结果:string(3) "PHP" string(1) "C" //int(2) 表示整型数据2;//string(3) “PHP”表示字符串型数据“PHP”,字符串长度为3;//string(1) "C"表示字符串型数据“C”,字符串长度为1。
1.4 标识符
在PHP开发中,经常需要在程序中定义一些符号来标记某些实体,如变量名、函数名、类名、方法名等,这些符号被称为标识符。 定义标识符要遵循一定的规则,具体规则如下。
- 标识符只能由字母、数字、下画线以及0x80~0xff范围内的字符组成。
- 标识符不能以数字开头。
- 标识符用作变量名时,区分大小写。
下面列举一些合法和非法的标识符。
test是合法标识符。 _test是合法标识符。 test88是合法标识符。
66test是非法标识符。 123是非法标识符。 te st是非法标识符。 *test是非法标识符。
1.5 关键字
关键字是PHP中事先定义好并赋予特殊含义的标识符,也称作保留字。在使用关键字时,需要注意关键字不能作为常量、函数名或类名使用。
2.变量、常量和表达式
2.1 变量
在程序运行期间,随时可能产生一些临时数据,这些数据可以通过变量来保存。变量是保存可变数据的容器,变量的表示方式为“$变量名”,其中变量名遵循标识符的命名规则。
PHP是弱类型语言,变量不需要事先声明,就可以直接进行赋值使用,赋值方式有两种。
传值赋值
传值赋值是将“=”右边的数据赋值给左边的变量。
$result = $number;
引用赋值
引用赋值是实现变量的引用,相当于给变量起一个别名。如果其中一个变量的值发生改变,另一个变量的值也会发生改变。
$result = &$number;
2.2 可变变量
通过可变变量,可以将另外一个变量的值作为该变量的名称。
$a = 'say';$say = 'Hello';$Hello = 'Lucy';echo '$a变量的值:', $a;echo '
';echo '$$a变量的值:', $$a;echo '
';echo '$$$a变量的值:', $$$a;
2.3 常量
在PHP脚本运行过程中,常量的值始终不变。常量的特点是一旦被定义就不能被修改或重新定义。例如,数学中的圆周率π就是一个常量,其值是固定且不能被改变的。 PHP中常量的命名遵循标识符的命名规则,习惯上总是使用大写字母定义常量名称。
define()函数
define()函数语法格式如下。
define(常量名, 常量值, 是否区分大小写);
第1个参数表示常量的名称; 第2个参数表示常量值; 第3个可选参数用于指定常量名是否区分大小写,默认值为false,表示常量名在默认情况下区分大小写。 (PHP7.3中已经废弃了定义不区分大小写常量的功能)
const关键字
const R = 6;echo 'R=', R; // 输出结果:R=6
使用const关键字定义常量,只需在const后面跟上一个常量名称,并使用“=”进行赋值。
2.4 预定义常量
为了方便开发人员的使用,PHP提供了预先定义好的常量来获取PHP中的信息。预定义常量的使用非常简单,使用“echo 常量名;”语句即可查看常量的值。
2.5 表达式
表达式是PHP中非常重要的基石,任何有值的内容都可以理解为表达式。例如,常量、变量、“$a = 1”和“$a + 4”都可以看成表达式,下面列举一些表达式。
数据类型
在PHP中,每个数据都有其对应的数据类型,不同的数据类型存储的数据也不同。
PHP支持3类数据类型,分别为标量类型、复合类型及特殊类型。
1. 布尔型
布尔型通常用于逻辑判断,只有true和false两个值,表示事物的“真”和“假”, true和false不区分大小写。
$flag1 = true;// 将true赋值给变量$flag1$flag2 = false;// 将false赋值为变量$flag2
2. 整型
整型用来表示整数,它可用八进制数、十进制数和十六进制数来表示,且前面可以加上“+”或“-”符号,表示正数或负数。
$oct = 073;// 八进制数$dec = 59;// 十进制数$hex = 0x3b;// 十六进制数//八进制数使用0~7表示,数字前必须加上0。//十六进制数使用0~9和A~F表示,数字前必须加上0x。
当定义的整型数值大于系统的整型数所能表示的最大范围时,将会被自动转换为浮点型。
$number1 = 2147483647;var_dump($number1);// int(2147483647)$number2 = 2147483648;var_dump($number2);// float(2147483648)//32位系统中整型的取值范围是-2147483648 ~ 2147483647,//64位系统中整型的取值范围是-9223372036854775808 ~ 9223372036854775807
3. 浮点型
浮点型可以保存浮点数,浮点数在程序中用来表示小数。浮点数的有效位数是14位,有效位数是指从最左边第一个不为0的数开始,直到末尾数的个数,且不包括小数点。
PHP中通常用两种方式表示浮点数:标准格式和科学记数法格式。
标准格式示例:
$fnum1 = 1.759;$fnum2 = -4.382;
科学记数法是一种记数的方法,即把一个数表示成a与10的n次幂相乘的形式。代码中一般使用E 或e表示10的幂。例如,5×103可以写成5E3或5e3。
科学记数法格式示例:
$fnum3 = 1.234E-2; // 等同于0.01234$fnum4 = 7.469E-4; // 等同于0.0007469
4. 字符串型
字符串是由字母、数字等各种字符组成的字符序列。
PHP提供了4种表示字符串的方式:
- 单引号
- 双引号
- heredoc语法结构
- nowdoc语法结构
(1)单引号和双引号
在PHP中,单引号字符串中的变量不会被解析,双引号字符串中的变量会被解析。
';echo "$number=", $number;
结果
$number = 100;
100=100
在字符串中如果要使用一些特殊符号,则需要使用转义字符“\”对其进行转义。
echo "嵌套\"双引号\"";// 输出结果:嵌套"双引号"echo '嵌套\'单引号\'';// 输出结果:嵌套'单引号'
当双引号字符串中包含变量时,可能会出现变量与字符串混淆的问题。
解决办法:为变量添加“{}” 。
$ap = 'ma';$apple = 'test';echo "$apple";// 不解析$ap变量,输出结果:testecho "{$ap}ple";// 解析$ap变量,输出结果:maple
(2)heredoc和nowdoc语法结构
heredoc和nowdoc的语法结构都是以“<<<”开始,后面紧跟标识符名称,结束标识符名称与开始标识符名称应相同,结束标识符要单独占一行且顶格书写,以分号结尾。
数据类型转换
在PHP中操作两个数据时,如果两个数据的数据类型不同,则无法进行相关的操作,需要将这两个数据转换成统一的数据类型后才能进行操作。
1. 自动类型转换
自动类型转换是指当参与运算的两个数据类型不同时,PHP自动转换成相同类型再进行运算。 PHP常见的自动类型转换有3种:
(1)自动转换成布尔型
当整型0、浮点型0.0、空字符串以及字符串'0'这些数据转换为布尔型时,都会被转为false,其他数据则会被转为true。
var_dump(0 == false);// bool(true)var_dump(0.0 == false);// bool(true)var_dump('' == false);// bool(true)var_dump('0' == false);// bool(true)//“==”是比较运算符,用于比较两个值是否相等。如果两个值数据类型不同,就会自动转换成相同的数据类型后再进行比较。
(2)自动转换成整型
当浮点型数据转换成整型时,将直接对浮点数向下取整。 当布尔型数据转换成整型时,布尔值true转换成整型值1,布尔值false转换成整型值0。
var_dump(true + 1);//输出结果: int(2)var_dump(false + 1);//输出结果: int(1)
当字符串型数据转换成整型时,若字符串是以数字开始,则使用该数值,否则转换为0。
var_dump('1PHP' + 1);// 输出结果:int(2)var_dump('PHP1' + 1);// 输出结果:int(1)//'1PHP' 被自动转换成了整型1。//'PHP1' 被自动转换成了整型0。
(3)自动转换成字符串型
当布尔型数据转换成字符串型时,布尔值true会被转换成字符串 '1';布尔值false会被转换成空字符串。
echo 'true被转换成字符串:' . true;// true被转换成字符串:1echo 'false被转换成字符串:' . false;// false被转换成空字符串//“.”用于前后两个数据进行字符串拼接,拼接时会发生自动类型转换
当整型或浮点型数据转换成字符串型时,直接将数字转换成字符串形式。
var_dump(1 . 'PHP');// 输出结果:string(4) "1PHP"var_dump(3.14 . 'PHP');// 输出结果:string(7) "3.14PHP"
2. 强制类型转换
自动类型转换是由PHP内部自动完成的,开发人员无法干预。如果开发人员想要手动对数据进行类型转换,则可以通过强制类型转换来实现。 强制类型转换是指将某个数据或变量转换成想要的数据类型
语法格式如下。
(目标类型)变量或数据
运算
1 算术运算符
算术运算符就是用于对数值类型的变量及常量进行数学运算的符号。
算术运算符使用时应注意以下两点。
- 进行四则混合运算时,运算顺序要遵循数学中“先乘除后加减”的原则。
- 在进行取模运算时,运算结果的正负取决于被模数(%左边的数)的符号,与 模数(%右边的数)的符号无关。例如,(-8) % 7 = -1,而8 % (-7) = 1。
2 赋值运算符
赋值运算符是一个二元运算符,它有两个操作数,用来对这两个操作数进行相应的运算。
赋值语句的执行顺序是从右到左。
$first = $second = $third = 3;// 为3个变量同时赋值//将3赋值给变量$third。//把变量$third的值赋值给变量$second。//把变量$second的值赋值给变量$first。
“+=”“-=”“*=”“/=”“%=”“.=”“**=”表示先将运算符左边的变量与右边的值进行运算,然后把运算结果赋值给左边的变量。
$a = 5;$a += 4;//“$a += 4;相当于$a = $a + 4;
“.=”表示对两个字符串进行连接操作。
$str = 'I love ';$str .= 'PHP';//“$str .= 'PHP';”相当于$str = $str . 'PHP';
3 比较运算符
比较运算符用于对两个变量或表达式进行比较,其结果是一个布尔型的true或false。
比较运算符使用时需要注意以下两点。
- 对于数据类型不相同的两个数据进行比较时,PHP会自动将其转换成类型相同的数据后再进行比较,例如,3与3.14进行比较时,首先会将3转换成浮点型3.0,然后再与3.14进行比较。
- “===”与“!==”运算符在进行比较时,不仅要比较数值是否相等,还要比较数据类型是否相同。而“==”和“!=”运算符在比较时,只比较数值是否相等。
4 三元运算符
三元运算符又称三目运算符,用于实现简单的条件判断,根据条件表达式的结果执行不同的表达式。
<条件表达式> ? <表达式1> : <表达式2>
先求条件表达式的值,如果为true,则返回表达式1的执行结果;如果为false,则返回表达式2的执行结果。
$num = 4;echo $num >= 5 ? '大' : '小';// 输出结果:小
当表达式1与条件表达式相同时,可以简写,省略表达式1。
<条件表达式> ? : <表达式2>
在变量$age为自然数($age≥0)的情况下,正常形式和简写形式的写法对比如下。
$age = 5;echo $age ? $age : '未出生';// 正常形式,输出结果:5echo $age ? : '未出生';// 简写形式,输出结果:5
5 逻辑运算符
逻辑运算符就是在程序开发中用于逻辑判断的符号,其返回值是布尔型。
对于 与 操作和 或 操作,需要注意以下两点。
- 使用 && 或 and 连接两个表达式时,如果左边表达式的值为false,则右边的表达式不会执行。
- 使用 || 或 or 连接两个表达式时,如果左边表达式的值为true,则右边的表达式不会执行。
$a = true; //声明一个布尔型变量$a,赋值为真$b = true; //声明一个布尔型变量$b,赋值为真$c = false; //声明一个初值为假的布尔型变量$cif($a or $b and $c){ //用or做判断 echo "真";}else{ echo "假";}echo "
";if($a || $b and $c){ //用||做判断 echo "真";}else{ echo "假";}
6 递增/递减运算符
递增/递减运算符也称作自增/自减运算符,它们可以被看作是一种特定形式的复合赋值运算符。
如果运算符(++或--)放在操作数的前面,则先进行递增或递减运算,再进行其他运算;如果运算符放在操作数的后面,则先进行其他运算,再进行递增或递减运算。
在使用递增/递减运算符时,需要注意以下4点
- 递增/递减运算符只针对纯数字或字母(a~z和A~Z)进行运算。
- 对于值为字母的变量,只支持递增操作,不支持递减操作。如$x值为a,则++$x结果为b。
- 当操作数为布尔型数据时,递增/递减操作对其值不产生影响。
- 当操作数为NULL时,递增的结果为1,递减不受影响。
7 字符串运算符
PHP提供了用于拼接两个字符串的运算符“.” 。
$str = 'learning';$html = 'Welcome to ' . $str . ' PHP';echo $html;// 输出结果:Welcome to learning PHP
当使用“.”拼接的变量或值是布尔型、整型、浮点型或NULL时,会被自动转换成字符串型。
8 位运算符
位运算符是针对二进制数的每一位进行运算的符号,它专门针对数字0和1进行操作。
详细了解
流程控制
在PHP中,流程控制是指控制代码的执行流程。流程控制有三大结构,分别是顺序结构、分支结构和循环结构。在前面的代码编写中,代码都是按照自上而下的顺序逐条执行的,这种代码就是顺序结构,除了顺序结构,在开发中还会用到分支结构和循环结构。
1 分支结构
if语句
if语句也称为单分支语句,用于判断当满足某种条件时进行某种处理。
if (条件表达式) { 代码段}//条件表达式的值是一个布尔值,当该值为true时,执行“{}”中的代码段,否则不进行任何处理。
if…else语句
if…else语句也称为双分支语句,用于判断当满足某种条件时进行某种处理,否则进行另一种处理。
if (条件表达式) { 代码段1} else { 代码段2}//当条件表达式的值为true时,执行代码段1。//当条件表达式的值为false时,执行代码段2。
if…else if…else语句
if (条件表达式1) { 代码段1} else if (条件表达式2) { 代码段2}...else if (条件表达式n) { 代码段n} else { // 代码段n + 1}//在PHP中,else和if之间的空格可以省略,//即“else if”可以写为“elseif”
switch语句
switch语句也是多分支语句,它的优点是代码清晰简洁、便于阅读
switch (表达式) { case 值1: 代码段1; break; case 值2: 代码段2; break;...default: 代码段n;}//计算表达式的值。//将计算的值与case中的值依次比较。//如果表达式的值与case后的值相等,则执行case后对应代码段。//若没有匹配的值,则执行default中的代码段。//default及其代码不子啊需要的情况下可以省略。
2 循环结构
while语句
while语句可以根据循环条件来判断是否重复执行某一段代码
while (循环条件) { 循环体}//当循环条件为true时,执行循环体。//当循环条件为false时,结束整个循环。//注意:如果循环条件永远为true,会出现死循环。
do…while语句
do...while语句会无条件执行一次循环体后再判断循环条件
do { 循环体} while (循环条件);//do后面“{}”中的循环体会先执行,执行后再判断循环条件,当循环条件为true时,继续执行循环体,否则,结束本次循环。
for语句
for语句适合用在循环次数已知的情况。
for (初始化表达式; 循环条件; 操作表达式) { 循环体}//for语句小括号“()”内的每个表达式都可以为空,但是必须保留分号分隔符。//当每个表达式都为空时,表示该循环语句的循环条件永远满足,//会进入无限循环的状态,此时如果要结束无限循环,//可在循环体中用跳转语句(后面学)进行控制。
4 跳转语句
在循环结构中,如果想要控制程序的执行流程,例如满足特定条件时跳出循环或者结束执行本次循环,开始下一轮循环,可以使用跳转语句来实现。
break语句
break语句在循环语句中用于终止循环。例如,当while语句的循环条件永远为true时,就会形成死循环,如果想要终止死循环,可以在while循环体中使用break语句来终止循环。
'; if ($i++ == 3) { break; }}
break语句还可以指定跳出循环的层数。
for ($i = 0; $i < 3; $i++) { echo '外层循环' . $i . '开始:'; for ($j = 0; $j < 2; $j++) { if ($i == 1) { break 2; // 使用break 2直接跳出双层循环 } echo '内层循环' . $i . '-' . $j . ','; } echo '外层循环' . $i . '结束
';}
continue语句
continue语句用于结束执行本次循环,开始下一轮循环。例如,输出1~10之间的奇数, 如果是奇数则输出对应的值,如果是偶数则跳过,进入下一轮循环。
';}
流程控制替代语句
在HTML模板中嵌入PHP代码时,流程控制替代语句是的一种可读性更好的语法,其基本形式就是把流程控制语句的左大括号“{”换成冒号“:”,把右大括号“}”换成“end+对应语句+分号”的形式。
文件包含语句
在程序开发中,通常会将页面的公共代码提取出来,放到单独的文件中,然后使用PHP提供的文件包含语句,将公共的文件包含进来,从而实现代码的复用。例如,项目中的初始化文件、配置文件、HTML模板文件等都是公共文件。
1 include和require
include语句和require语句都可以引入一个外部文件,这两个语句的语法格式类似,下面以include语句为例讲解。
// 第一种写法:include '完整路径文件名';// 第二种写法:require('完整路径文件名');//以上两种写法实现的功能相同。//完整路径文件名是指被包含文件所在的绝对路径或相对路径。//绝对路径是指从盘符开始的路径,如“C:/web/test.php”;//相对路径是指从当前路径开始的路径,//如引入当前所在目录下的test.php文件,相对路径就是“./test.php”。
注
当引入的外部文件出现错误时,include语句和require语句处理失败的方式不同,include语句会发生警告信息,程序继续运行;require语句会抛出一个致命错误,程序停止运行。
2 include_once和require_once
使用include_once语句和require_once语句包含外部文件时,PHP会检查该文件是否在程序中已经被引入。如果已经被引入,则外部文件不会被再次引入,从而避免重复引入同一文件。
include_once("a.php");require_once("a.php");
来源地址:https://blog.csdn.net/saint_la/article/details/126840269
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341