PHP基础语法(上)

简介: PHP在当今世界仍然是一门流行和重要的服务器端脚本语言。它具有广泛的应用领域、强大的生态系统和不断发展的特点,为Web开发提供了可靠和灵活的解决方案。

 前言

本篇文章通过介绍PHP的基础语法,数据与运算,来让你了解PHP的魅力。

这是本篇文章的脉络图:

image.gif编辑


一、基础语法

1.1 标记

标记:由于PHP 是嵌入式脚本语言,它在实际开发中经常会与HTML内容混编在一起,

所以为了区分HTML与PHP代码,需要使用标记对PHP代码进行标识。

image.gif编辑

注意:当解析一个文件时,PHP会寻找起始和结束标记,也就是告诉PHP开始和停止解析二者之间的代码。此种解析方式使得PHP可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被PHP解析器忽略。

1.2 输出语句

1.2.1 echo

echo可将紧跟其后的一个或多个字符串、表达式、变量和常量的值输出到页面中,多个数据之间使用逗号“,”分隔。

1.2.2 print

print与echo的用法相同,唯一的区别是print只能输出一个值。

print_r():PHP的内置函数,它可输出任意类型的数据,如字符串、数组等。

var_dump():不仅可以打印一个或多个任意类型的数据,还可以获取数据的类型和元素个数。

例如:

<?php
var_dump("php","2");
?>

image.gif

image.gif编辑

1.3 注释

注释:在PHP开发中,为了便于对代码的阅读和维护,可以使用注释来进行解释和说明。它在程序解析时会被PHP解析器忽略。

1.3.1 单行注释

使用双斜线(//)来注释单行代码。注释符号后面的内容将被视为注释,不会被解释器执行。

例如:

<?php 
// 这是一个单行注释示例 
$variable = "Hello World";
?>

image.gif

1.3.2 多行注释

使用斜线加星号(/*... */)来注释多行代码。注释符号之间的内容将被视为注释,不会被解释器执行。

例如:

<?php
/* 这是一个多行 
注释示例 */ 
$variable2 = "Hello World";
?>

image.gif

1.4 标识符

标识符:PHP程序开发中,经常需要自定义一些符号来标记一些名称,如变量名、函数名、类名等,这些符号被称为标识符。

标识符的定义需要遵循一定的规则,具体如下:

1. 标识符只能由字母、数字、下划线组成,且不能包含空格

2.标识符只能以字母或下划线开头的任意长度的字符组成

3.标识符用做变量名时,区分大小写 $a,$A

4.如果标识符由多个单词组成,那么应使用下划线进行分隔(例如:user_name)

例如:

合法标识符: itcast、itcast88、_itcast、username、password等。

非法标识符:66itcast、it cast、123、@itcast等。

1.5 关键字

关键字:是编程语言里事先定义好并赋予特殊含义的单词,也称作保留字。和其他语言一样,PHP中保留了许多关键字,下面是PHP的一些主要关键字:

1. echo:用于在屏幕上输出文本或变量的值。

2. if、else、elseif:用于条件语句,根据指定条件执行不同的代码块。

3. for、while、do-while:用于循环结构,重复执行一段代码块。

4. switch、case:用于多重条件判断,根据不同情况执行不同的代码块。

5. break:用于退出循环或switch语句。

6. continue:用于跳过当前循环的剩余代码,继续下一轮循环。

7. function:用于定义和声明一个函数。

8. class、interface、trait、extends、implements:用于面向对象编程,定义类、接口和特性,实现类之间的继承和接口的实现。

9. public、protected、private:用于定义类的成员属性或方法的访问级别。

10. static:用于定义静态属性和方法,可以在不创建类的实例的情况下访问。

11. final:用于防止类被继承或方法被覆盖。

12. abstract:用于声明抽象类或方法,不能直接实例化。

13. namespace:用于声明命名空间,避免类名冲突。

14. use:用于导入其他命名空间的类或函数。

二、数据与运算

2.1 常量

概念:常量就是在脚本运行过程中值始终不变的量。

特点:是一旦被定义就不能被修改或重新定义。

举例:数学中的圆周率π就是一个常量,其值就是固定且不能被改变的。

命名规则:遵循标识符的命名规则,默认大小写敏感,习惯上常量名称总是使用大写字母表示。

2.1.1 常量的定义和使用

在PHP中,可以使用`define()`函数来定义常量。常量是无法被改变的值,在定义后不能再次进行修改。常量的定义方式有两种:

1. 使用 `define()` 函数定义常量:

define ('PAI', '3.14'); 
echo 'PI =', PAI; / / Output result: PI =3.14 
define ('R', '5', true); 
echo 'radius =', R; / / Output result: Radius =5 
echo 'radius =', r; / / Output result: Radius =5

image.gif

首个参数定义常量的名称,第二个参数定义常量的值,可选的第三个参数规定常量名是否对大小写不敏感。默认是 false。如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。常量定义后,可以在任何地方使用,不需要加`$`符号,直接使用常量名称即可。

2. 使用`const`关键字定义常量(PHP 5.3+):

const R = 6;
const P = 2 * R;
echo 'P=', P; // 输出结果:P=12

image.gif

无论使用哪种方式定义常量,都无法在定义后再次修改常量的值。另外,常量的作用域是全局的,可以在任何地方访问,包括函数内部。

2.1.2 预定义常量

PHP中有许多预定义常量,它们是由PHP提供的全局常量。这些常量可以在任何地方直接使用,无需进行定义或声明。以下是一些常用的预定义常量及其解释:

    1. __FILE__:当前执行的文件的完整路径和文件名。
    2. __DIR__:当前执行的文件所在的目录的绝对路径。
    3. __LINE__:当前代码行号。
    4. __FUNCTION__:当前所在函数的函数名。
    5. __CLASS__:当前所在类的类名。
    6. __METHOD__:当前所在方法的方法名。
    7. __NAMESPACE__:当前所在命名空间的命名空间名。
    8. PHP_VERSION:当前PHP版本号。
    9. PHP_OS:运行PHP的操作系统。
    10. PHP_EOL:当前操作系统的换行符。

    这些预定义常量可以帮助我们获取有关代码和环境信息,方便进行调试和编程。可以通过直接在代码中使用它们来获取相应的值。示例:

    echo __FILE__; // 输出当前文件的完整路径和文件名
    echo __DIR__; // 输出当前文件所在的目录的绝对路径
    echo __LINE__; // 输出当前代码行号
    function myFunction() {
        echo __FUNCTION__; // 输出当前所在函数的函数名
        echo __CLASS__; // 输出当前所在类的类名
        echo __METHOD__; // 输出当前所在方法的方法名
    }
    echo PHP_VERSION; // 输出当前PHP版本号
    echo PHP_OS; // 输出运行PHP的操作系统

    image.gif

    2.2 变量

    概念:变量是用于存储信息的"容器":

    组成:在PHP中,变量是由$符号和变量名组成的。

    规则:变量名的命名规则与标识符相同。

    举例:如$number、$_it为合法的变量名,而$123、$*math为非法变量名。

    2.2.1 变量的赋值

    在PHP中,变量赋值是将一个值保存到变量中的过程。PHP是一种动态类型的语言,因此在赋值时无需事先声明变量的数据类型。以下是关于PHP变量赋值的三种方式:

    1. 传值赋值:

    $variable_name = value;

    image.gif

    这是最常见的赋值语法,通过=操作符将一个值赋给变量。$variable_name是变量名,value是要赋给变量的值。

    示例:

    $name = "John"; // 将字符串 "John" 赋给变量 $name
    $age = 25; // 将数字 25 赋给变量 $age
    $is_active = true; // 将布尔值 true 赋给变量 $is_active

    image.gif

    2. 引用赋值:

    在PHP中,通过引用赋值可以使用多个变量引用同一个值。

    $variable_name = &$reference_variable;

    image.gif

    `&$reference_variable`表示一个引用变量,它与其他变量共享相同的内存空间,即对其中一个变量的修改会影响其他引用变量。

    示例:

    $a = 10;
    $b = &$a; // 将 $a 的引用赋给 $b
    $b = 20; // 修改 $b 的值也会影响 $a
    echo $a; // 输出 20

    image.gif

    两种实现方式的区别:传值赋值方式当一个变量值发生改变时,不影响另一个变量;而引用赋值的方式,另一个变量会随之变化。

    2.2.2 超全局变量

    在PHP中,超全局变量(superglobal variables)是一类预定义的全局变量,它们在脚本的任何地方都可以直接访问,无需额外的声明或引用。这些超全局变量在整个脚本中都是可用的,无论是在函数、类、循环还是条件语句中。

    以下是PHP中最常用的超全局变量:

    1. `$_GET`:用于获取通过 URL 查询字符串传递的参数。它是一个关联数组,其中的键是参数名,值是参数的值。

    示例:

    // URL: example.com?name=John&age=25
    echo $_GET['name']; // 输出 "John"
    echo $_GET['age']; // 输出 "25"

    image.gif

    2. `$_POST`:用于获取通过 HTTP POST 方法提交的表单数据。它也是一个关联数组,其中的键是表单字段名,值是字段的值。

    示例:

    // 表单中的字段:<input type="text" name="name"> 和 <input type="text" name="age">
    echo $_POST['name']; // 输出提交的 name 字段的值
    echo $_POST['age']; // 输出提交的 age 字段的值

    image.gif

    3. `$_REQUEST`:用于获取通过 HTTP GET 或 POST 方法提交的参数和表单数据。它是`$_GET`和`$_POST`的合并。

    4. `$_COOKIE`:用于获取客户端提交的 Cookie 值。它是一个关联数组,其中的键是 Cookie 名称,值是 Cookie 的值。

    示例:

    echo $_COOKIE['username']; // 输出名为 username 的 Cookie 值

    image.gif

    5. `$_SESSION`:用于访问当前会话的 session 数据。它是一个关联数组,用于在不同页面之间存储和读取会话信息。

    示例:

    session_start();
    $_SESSION['username'] = 'John'; // 设置 session 变量
    echo $_SESSION['username']; // 输出 'John'

    image.gif

    6. `$_SERVER`:包含了有关服务器和执行环境的信息,例如请求的方法、请求的 URL、服务器的主机名等。它是一个关联数组。

    示例:

    echo $_SERVER['REQUEST_METHOD']; // 输出请求的方法(GET、POST、PUT等)
    echo $_SERVER['SERVER_NAME']; // 输出服务器的主机名

    image.gif

    2.3 数据类型

    PHP中支持3类数据类型:

    1.标量数据类型

    2.复合数据类型

    3.特殊数据类型

    image.gif编辑

    2.3.1 标量数据类型

    1.布尔型

    布尔型是PHP中较常用的数据类型之一,通常用于逻辑判断。 表示事物的“真”和“假”,并且不区分大小写。

    示例:

    $isTrue = true;
    $isFalse = false;

    image.gif

    2.整型

    整型可以由十进制、八进制和十六进制数指定,用来表示整数。

    (1) 在它前面加上“-”符号,可以表示负数。

    (2)八进制数使用0~7表示,前缀为0。

    (3) 十六进制数使用0~9与A~F表示,以0x为前缀。

    3.浮点型

    概念:浮点数是程序中表示小数的一种方法,或是指数形式。

    表示方式:通常使用标准格式和科学计数法格式表示。

    4.字符串型

    概念:字符串是由连续的字母、数字或字符组成的字符序列。

    表示方式:分别为单引号、双引号、heredoc语法结构和nowdoc 语法结构。

    示例:

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

    image.gif

    注意:单引号输出字符串,双引号里面可以解析变量。

    上述例子运行结果如下:

    image.gif编辑

    2.3.2 特殊数据类型

    1.NULL

    NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。 NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。 可以通过设置变量值为 NULL 来清空变量数据:

    <?php
    $x="Hello world!";
    $x=null;
    var_dump($x);
    ?>

    image.gif

    在下列情况下一个变量被认为是NULL:

    (1)被赋值为NULL。

    (2)尚未被赋值。

    (3)被unset()。

    2.3.3 数据类型检测

    PHP中变量的数据类型通常不是开发人员设定的,而是根据该变量使用的上下文在运行时决定的。

    PHP中提供了许多检测数据类型的函数,大致可以分为两种:gettype()函数和is_*()类函数,括号里的参数为待要检测的值。

    is_*()如果检测的值符合检测的数据类型,则返回true,否则返回false。

    2.3.4 数据类型转换

    时机:在PHP中,对两个变量进行操作时,若其数据类型不相同,则需要对其进行数据类型转换。

    分类:通常情况下,数据类型转换分为自动类型转换和强制类型转换。

    1.自动类型转换

    指的是当运算需要或与期望的结果类型不匹配时,PHP将自动进行类型转换,无需开发人员做任何操作。

    分类:最常见的有3种,分别为转换成布尔型、转换成整型和转换成字符串型。

    2.强制类型转换

    所谓强制类型转换,就是在编写程序时手动转换数据类型,在要转换的数据或变量之前加上“(目标类型)”即可。

    例如:

    var_dump((int) "6.66");

    image.gif

    2.4 运算符及优先级

    2.4.1 运算符

    运算符,专门用于告诉程序执行特定运算或逻辑操作的符号。PHP提供了一系列的运算符,用于执行不同的数学、逻辑和字符串操作。以下是PHP中常见的运算符及其作用:

      1. 算术运算符:
        • + 加法:对两个数进行相加。
        • - 减法:从一个数中减去另一个数。
        • * 乘法:将两个数相乘。
        • / 除法:将一个数除以另一个数。
        • % 取模:取得两个数相除后的余数。
          1. 赋值运算符:
            • = 赋值:将右侧的值赋给左侧的变量。
            • += 加法赋值:将右侧的值加到左侧的变量上。
            • -= 减法赋值:从左侧的变量中减去右侧的值。
            • *= 乘法赋值:将左侧的变量乘以右侧的值并重新赋值给左侧的变量。
            • /= 除法赋值:将左侧的变量除以右侧的值并重新赋值给左侧的变量。
              1. 比较运算符:
                • == 等于:检查两个值是否相等。
                • != 不等于:检查两个值是否不相等。
                • > 大于:检查左侧的值是否大于右侧的值。
                • < 小于:检查左侧的值是否小于右侧的值。
                • >= 大于等于:检查左侧的值是否大于或等于右侧的值。
                • <= 小于等于:检查左侧的值是否小于或等于右侧的值。
                  1. 逻辑运算符:
                    • && 逻辑与:检查两个条件是否同时为真。
                    • || 逻辑或:检查两个条件是否至少有一个为真。
                    • ! 逻辑非:对条件进行取反。
                      1. 字符串运算符:
                        • . 连接:连接两个字符串。
                        • .= 连接赋值:将右侧的字符串连接到左侧的字符串上并重新赋值给左侧的字符串。
                          1. 自增/自减运算符:
                            • ++ 自增:将变量的值加1。
                            • -- 自减:将变量的值减1。
                              1. 数组运算符:
                                • + 合并:将两个数组合并为一个新数组。
                                • == 相等:检查两个数组是否相等。
                                • === 全等:检查两个数组的键和值是否完全相同。

                                  2.4.2 优先级

                                  运算符的优先级决定了它们在表达式中的结合性和执行顺序。如果有多个运算符同时出现,优先级高的运算符会先于优先级低的运算符进行计算。可以使用括号 () 来改变运算符的优先级和强制先执行某些部分。

                                  例如:先乘除,后加减。

                                  补充:圆括号()优先级别最高。例如, 5 + 6 * 7的输出结果为47,(5 + 6) * 7的输出结果为77。

                                  以下是运算符的优先级(从高到低):

                                    1. 一元运算符:
                                      一元运算符包括前置递增/递减运算符 ++$x--$x 和取反、正数运算符 -$x+$x。它们具有最高的优先级,会先于其他运算符进行计算。
                                    2. 乘性运算符:
                                      乘性运算符包括乘法 *、除法 / 和取模 %,以及字符串连接运算符 .。它们的优先级高于加性运算符,但低于一元运算符。乘性运算符按照从左到右的顺序进行计算。
                                    3. 加性运算符:
                                      加性运算符包括加法 + 和减法 -,以及字符串连接运算符 .。它们的优先级低于乘性运算符,但高于位移运算符。加性运算符按照从左到右的顺序进行计算。
                                    4. 位移运算符:
                                      位移运算符包括左移 << 和右移 >>。它们的优先级低于加性运算符,但高于比较运算符。
                                    5. 比较运算符:
                                      比较运算符包括小于 <、小于等于 <=、大于 >、大于等于 >=,以及等于 ==、不等于 !=、全等 ===、不全等 !==。比较运算符的优先级低于位移运算符,但高于位运算符和逻辑运算符。
                                    6. 位运算符:
                                      位运算符包括按位与 &、按位异或 ^、按位或 |。它们的优先级低于比较运算符,但高于逻辑运算符。
                                    7. 逻辑运算符:
                                      逻辑运算符包括逻辑与 &&、逻辑或 ||,以及逻辑异或 ^ 和逻辑非 !。逻辑运算符的优先级低于位运算符,但高于条件运算符。
                                    8. 三元条件运算符:
                                      三元条件运算符 expr1 ? expr2 : expr3 用于根据条件选择表达式的值。它的优先级低于逻辑运算符,但高于赋值运算符。
                                    9. 赋值运算符:
                                      赋值运算符用于给变量赋值,如 =+=-=*=/=%=.= 等。赋值运算符具有最低的优先级。


                                    总结

                                    PHP在当今世界仍然是一门流行和重要的服务器端脚本语言。它具有广泛的应用领域、强大的生态系统和不断发展的特点,为Web开发提供了可靠和灵活的解决方案。随着技术的进步和改进,PHP有望继续保持其在Web开发领域的重要地位。

                                    目录
                                    相关文章
                                    |
                                    2天前
                                    |
                                    存储 PHP 容器
                                    【PHP 开发专栏】PHP 基础语法与变量详解
                                    【4月更文挑战第30天】本文概述了PHP的基础,包括脚本结构(&lt;?php至?&gt;标签)、注释(单行和多行)、数据类型(整型、浮点型、字符串型、布尔型、数组、对象)、运算符(算术、比较、逻辑)和流程控制(条件、循环语句)。还讨论了PHP变量的定义、作用域、类型转换及引用传递。了解这些基础知识对PHP编程至关重要,实践中不断学习和探索能提升Web开发技能。
                                    |
                                    2月前
                                    |
                                    SQL 关系型数据库 PHP
                                    PHP基础语法
                                    PHP基础语法
                                    12 0
                                    |
                                    7月前
                                    |
                                    PHP
                                    PHP基础语法(下)
                                    本篇博客将会带你继续探索PHP语言的基础语法。本篇内容主要聚焦于PHP的流程控制语句和文件包含语句,掌握这些重要的语法结构将使您能够更好地控制程序流程,并且在开发过程中能够高效地组织和管理代码。
                                    73 2
                                    |
                                    8月前
                                    |
                                    XML 前端开发 JavaScript
                                    PHP 语法入门
                                    PHP 语法入门
                                    19 0
                                    |
                                    9月前
                                    |
                                    PHP
                                    php基础语法
                                    php基础语法
                                    37 2
                                    |
                                    10月前
                                    |
                                    关系型数据库 MySQL PHP
                                    lockdatav-API在开发过程中php和mysql语法的优化方案
                                    lockdatav-API在开发过程中php和mysql语法的优化方案
                                    52 0
                                    |
                                    10月前
                                    |
                                    Shell PHP
                                    shell检查php项目是否存在语法错误
                                    当检查一个PHP项目中是否存在语法错误时,我们可以使用Shell脚本来自动化这个过程。在本文中,我们将介绍两种方法来实现这个目标。
                                    156 0
                                    |
                                    PHP
                                    php新语法
                                    判断一个变量是a否存在,存在则赋值变量a,不存在赋值变量b;注意是判断一个变量是否存在,而不是判断一个变量是否为空
                                    80 0
                                    |
                                    PHP
                                    PHP解析Markdown库,parsedown扩展自定义语法
                                    在开发系统过程中,有些信息编写储存是使用Markdown通用语法,但由于各个平台的会新增一些独特规范,一般的解析库都是只包含了标准语法,对于自定义语法是不支持解析的(如vuepress文档系统中的::: tip 提示语块) 我们从vuepress迁移文档系统到自己实现的文档系统时,特定标签无法解析,需要扩展解析库的功能,来完成自定义语法。 PHP常见的Markdown解析库是parsedown。这个库非常的轻量,只有一个文件,无需依赖其他扩展。
                                    217 0
                                    PHP解析Markdown库,parsedown扩展自定义语法
                                    |
                                    JavaScript
                                    Ajax-PHP基础语法
                                    Ajax-PHP基础语法
                                    46 6