PHP语法基础

学习目标/Target

      掌握PHP标记、标识符、输出语句的使用,能够熟练编写简单的PHP程序

      熟悉注释和关键字的使用,能够在程序中正确使用注释和关键字

     掌握变量、常量和表达式的使用,能够在程序中正确使用变量、常量和表达式

     掌握数据类型和运算符的使用,能够使用不同的数据类型和运算符来操作数据

     掌握分支结构、循环结构的使用,能够实现条件判断和循环操作

     掌握循环嵌套的使用,能够通过循环嵌套处理复杂的程序逻辑

    掌握跳转语句的使用,能够在循环结构中正确使用跳转语句

     熟悉流程控制替代语句的语法,能够在程序中正确使用流程控制替代语句

     掌握文件包含语句的使用,能够根据需求使用不同的文件包含语句

学习一门语言就像盖大楼一样,要想盖一幢安全、稳固的大楼,必须要有一个夯实的地基。同样的道理,要想熟练使用PHP语言进行网站开发,必须先对PHP的语法基础进行学习。本章将对PHP的基本语法、变量、常量、表达式、数据类型、运算符、流程控制和文件包含语句进行详细讲解。

目录

基本语法

       PHP标记

       注释

        输出语句

        标识符

         关键字

变量、常量和表达式

            变量

           可变变量

           常量

             预定义常量

             表达式

数据类型

           常用的数据类型

           数据类型检测

            数据类型转换

运算符

             算术运算符

              赋值运算符

              比较运算符

            三元运算符

             逻辑运算符

             递增/递减运算符

              字符串运算符

              位运算符

流程控制

                   分支结构

                   循环结构

                  跳转语句

                   流程控制替代

 文件包含语句

                 include和require

               include_once和require_once


目录

         基本语法

1.1PHP标记

在使用PHP进行开发时,一般先编写一个简单的HTML网页,然后将PHP代码嵌入到HTML中。为了区分HTML与PHP代码,需要使用PHP标记对PHP代码进行标识。

PHP 7支持标准标记(<?php ?>)和短标记(<? ?>)

标准标记

如果一个PHP脚本中只包含PHP代码,不包含其他内容,则开始标记建议顶格书写,防止输出结果中出现不必要的空白字符,并且结束标记可以省略。

短标记

短标记以“<?”开始,以“?>”结束。在使用短标记前,需要将php.ini中的short_open_tag配置项设置为On,开启短标记功能后才可使用。

注意

若PHP脚本中含有XML语句,应避免使用短标记(<?  ?>)。如果PHP脚本中包含XML语句并使用了短标记,PHP解析器可能会混淆XML处理指令和PHP短标记。

<html>
  <body>
    <p>Hello HTML </p>
    <p><?php echo 'Hello, PHP'; ?></p>
  </body>
</html>

//<?php 是PHP代码的开始标记。
//?> 是PHP代码的结束标记。
//echo 用于输出字符串。
//'Hello, PHP' 是要输出的字符串。

          1.2   注释

     

             略

         1.3   输出语句

          在开发中,当需要将变量的值或各种类型的数据输出到网页中时,可用使用输出语句。 PHP提供了一系列的输出语句,常用的如下。

echo

echo用于输出字符串,如果输出其他类型的数据会自动转换成字符串,当输出多个数据时使用逗号“,”分隔。

echo 'true';		// 方式1,输出结果:true
echo 'result=', 4;		// 方式2,输出结果:result=4
  注意
//echo不适合数组和对象,数组和对象推荐print_r()   var_dump()

print

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是弱类型语言,变量不需要事先声明,就可以直接进行赋值使用,赋值方式有两种。

1. 传值赋值

 传值赋值是将“=”右边的数据赋值给左边的变量。

$result = $number;

2. 引用赋值

引用赋值是实现变量的引用,相当于给变量起一个别名。如果其中一个变量的值发生改变,另一个变量的值也会发生改变。

$result = &$number;

                   2.2  可变变量

              通过可变变量,可以将另外一个变量的值作为该变量的名称。

$a = 'say';
$say = 'Hello';
$Hello = 'Lucy';
echo '$a变量的值:', $a;
echo '<br>';
echo '$$a变量的值:', $$a;
echo '<br>';
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中,单引号字符串中的变量不会被解析,双引号字符串中的变量会被解析。

<?php
$number = 100;
echo '$number=', $number;
echo '<br>';
echo "$number=", $number;

 结果 

$number = 100;

100=100

                 在字符串中如果要使用一些特殊符号,则需要使用转义字符“\”对其进行转义。

echo "嵌套\"双引号\"";	// 输出结果:嵌套"双引号"
echo '嵌套\'单引号\'';	// 输出结果:嵌套'单引号'

 

 当双引号字符串中包含变量时,可能会出现变量与字符串混淆的问题。

解决办法:为变量添加“{}” 。

$ap = 'ma';
$apple = 'test';
echo "$apple";	// 不解析$ap变量,输出结果:test
echo "{$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被转换成字符串:1
echo 'false被转换成字符串:' . false;	// false被转换成空字符串
//“.”用于前后两个数据进行字符串拼接,拼接时会发生自动类型转换

 当整型或浮点型数据转换成字符串型时,直接将数字转换成字符串形式。

var_dump(1 . 'PHP');	// 输出结果:string(4) "1PHP"
var_dump(3.14 . 'PHP');	// 输出结果:string(7) "3.14PHP"

 2. 强制类型转换

 自动类型转换是由PHP内部自动完成的,开发人员无法干预。如果开发人员想要手动对数据进行类型转换,则可以通过强制类型转换来实现。 强制类型转换是指将某个数据或变量转换成想要的数据类型

语法格式如下。

              (目标类型)变量或数据

运算

1  算术运算符

算术运算符就是用于对数值类型的变量及常量进行数学运算的符号。

 

 算术运算符使用时应注意以下两点。

  1. 进行四则混合运算时,运算顺序要遵循数学中“先乘除后加减”的原则。
  2. 在进行取模运算时,运算结果的正负取决于被模数(%左边的数)的符号,与 模数(%右边的数)的符号无关。例如,(-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。

 

 比较运算符使用时需要注意以下两点。

  1.  对于数据类型不相同的两个数据进行比较时,PHP会自动将其转换成类型相同的数据后再进行比较,例如,3与3.14进行比较时,首先会将3转换成浮点型3.0,然后再与3.14进行比较。
  2. “===”与“!==”运算符在进行比较时,不仅要比较数值是否相等,还要比较数据类型是否相同。而“==”和“!=”运算符在比较时,只比较数值是否相等。

 4  三元运算符

 三元运算符又称三目运算符,用于实现简单的条件判断,根据条件表达式的结果执行不同的表达式。

 <条件表达式> ? <表达式1> : <表达式2>

 先求条件表达式的值,如果为true,则返回表达式1的执行结果;如果为false,则返回表达式2的执行结果。

$num = 4;
echo $num >= 5 ? '大' : '小';	// 输出结果:小

 当表达式1与条件表达式相同时,可以简写,省略表达式1。

 <条件表达式> ? : <表达式2>

 在变量$age为自然数($age≥0)的情况下,正常形式和简写形式的写法对比如下。

$age = 5;
echo $age ? $age : '未出生';	// 正常形式,输出结果:5
echo $age ? : '未出生';	// 简写形式,输出结果:5

 5  逻辑运算符

 逻辑运算符就是在程序开发中用于逻辑判断的符号,其返回值是布尔型。

 

 对于 与 操作和 或 操作,需要注意以下两点。

  1.  使用 && 或 and 连接两个表达式时,如果左边表达式的值为false,则右边的表达式不会执行。
  2.  使用 || 或 or 连接两个表达式时,如果左边表达式的值为true,则右边的表达式不会执行。 
$a = true;             //声明一个布尔型变量$a,赋值为真
$b = true;             //声明一个布尔型变量$b,赋值为真
$c = false;            //声明一个初值为假的布尔型变量$c
if($a or $b and $c){      //用or做判断
    echo "真";
}else{
    echo "假";
}

echo "<br/>";

if($a || $b and $c){      //用||做判断
    echo "真";
}else{
    echo "假";
}

 6  递增/递减运算符

 递增/递减运算符也称作自增/自减运算符,它们可以被看作是一种特定形式的复合赋值运算符。

 如果运算符(++或--)放在操作数的前面,则先进行递增或递减运算,再进行其他运算;如果运算符放在操作数的后面,则先进行其他运算,再进行递增或递减运算。

 

 在使用递增/递减运算符时,需要注意以下4点

  1.  递增/递减运算符只针对纯数字或字母(a~z和A~Z)进行运算。
  2. 对于值为字母的变量,只支持递增操作,不支持递减操作。如$x值为a,则++$x结果为b。
  3. 当操作数为布尔型数据时,递增/递减操作对其值不产生影响。
  4.  当操作数为NULL时,递增的结果为1,递减不受影响。

7  字符串运算符 

 PHP提供了用于拼接两个字符串的运算符“.” 。

$str = 'learning';
$html = 'Welcome to ' . $str . ' PHP';
echo $html;	// 输出结果:Welcome to learning PHP

 当使用“.”拼接的变量或值是布尔型、整型、浮点型或NULL时,会被自动转换成字符串型。

8  位运算符 

 位运算符是针对二进制数的每一位进行运算的符号,它专门针对数字0和1进行操作。

 

 详细了解

https://www.php.cn/

流程控制

在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语句来终止循环。

<?php
$i = 1;
while (true) {
    echo $i . '.例子<br>';
    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 . '结束<br>';
}

  continue语句

 continue语句用于结束执行本次循环,开始下一轮循环。例如,输出1~10之间的奇数, 如果是奇数则输出对应的值,如果是偶数则跳过,进入下一轮循环。

<?php
for ($i = 1; $i <= 10; $i++) {
    if ($i%2 == 0) {
        continue;
    }
    echo $i . '.例子<br>';
}

 流程控制替代语句

 在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");

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值