PHP 基础案例教程之 02-PHP 语法基础

基本语法

PHP 标记

PHP 代码可以嵌入 HTML 中使用,为了区分 PHP 代码和 HTML 代码,需要使用 PHP 标记对 PHP 代码进行标识,PHP 的标记分为标准标记和短标记。

PHP 标记的基本用法:

PHP 复制代码
<?php 代码块 ?>
<? 代码块 ?>	// 不推荐使用,需要在php.ini中启用short_open_tag
<?= 输出内容 ?>

示例:PHP 标记

入口页面(index.php):

PHP 复制代码
<h1><?php echo "Hello PHP!" ?></h1>
<h1><?= "Hello PHP!" ?></h1>

示例效果:


在 PHP 标记后面,如果没有除 PHP 以外的其他代码,标记末尾的 ?> 符号可以省略。

注释

在 PHP 开发中,为了方便开发人员阅读和维护代码,可以添加注释对代码进行解释说明。

单行注释的基本用法:

PHP 复制代码
// ...
# ...

多行注释的基本用法:

PHP 复制代码
/*
	....
*/

输出语句

PHP 提供了一系列的输出语句,常用的输出语句有 echo、print、print_r、var_dump 等。

echo 输出语句用于输出字符串,如果输出其他类型的数据,会自动转换成字符串。

echo 输出语句的基本用法:

PHP 复制代码
echo "...";
echo "...", "...";

print 输出语句与 echo 输出语句类似,但 print 输出语句只能输出一个数据。

print 输出语句的基本用法:

PHP 复制代码
print "...";

print_r 输出语句可以输出任意类型的数据,如字符串、数组等。

print_r 输出语句的基本用法:

PHP 复制代码
print_r("...");

var_dump 输出语句不仅可以输出一个或多个任意类型的数据,还可以获取数据的类型和元素值。

var_dump 输出语句的基本用法:

PHP 复制代码
var_dump("...");
var_dump("...", "...");

示例:输出语句

入口页面(index.php):

PHP 复制代码
<?php
echo "Hello echo<br>";

print "Hello print<br>";

print_r("Hello print_r<br>");

var_dump("Hello var_dump")

示例效果:


标识符

定义标识符(如变量名、函数名、类名、方法名等)需要遵循一定的规则:

  • 标识符只能由字母、数字、下划线以及 0x80-0xff 范围内(十六进制数值范围)的字符组成。
  • 标识符不能以数字开头。
  • 标识符用作变量名时,区分大小写。

关键字

在使用关键字时,需要注意关键字不能作为常量、函数名或类名使用。

随着 PHP 版本的更新,关键字也在不断变化,可以通过查阅 PHP 官方手册来获取最新的关键字列表。

变量、常量和表达式

变量

PHP 是弱类型语言,变量不需要实现声明,就可以直接进行赋值使用。

PHP 变量赋值分为传值赋值和引用赋值。

传值赋值是将等号右边的数据赋值给左边的变量。

传值赋值的基本用法:

PHP 复制代码
$变量名 = 变量值;

示例:传值赋值

入口页面(index.php):

PHP 复制代码
<?php
$userName = "多仔";
$age = 18;

echo "姓名:".$userName;   // 使用.号拼接字符串
echo "<br>";
echo "年龄:".$age;

示例效果:


引用赋值时,如果其中的一个变量的值发生改变,则另一个变量的值也会发生改变。

引用赋值的基本用法:

PHP 复制代码
$变量名 = &$要引用的变量名;

示例:引用赋值

入口页面(index.php):

PHP 复制代码
<?php
$userName = "多仔";
$age = 18;

echo "姓名:".$userName;
echo "<br>";
echo "年龄:".$age;
echo "<br>";

// 引用赋值
$newAge = &$age;

// 修改变量$age的值
$age = 81;

// 变量$newAge的值随着变量$age的改变而改变
echo "年龄:".$newAge;

示例效果:


可变变量

PHP 提供了可变变量,可以在开发时动态地改变一个变量的名称,将另一个变量的值作为该变量的名称。

在使用可变变量时,变量的值要符合标识符规则,避免出现非法变量名的情况。

可变变量的基本用法:

PHP 复制代码
$变量名 = $$变量名;

示例:可变变量

入口页面(index.php):

PHP 复制代码
<?php
$userName = "多仔";
$age = 18;

$variableName = "userName";

// 相当于输出$userName
echo "姓名:".$$variableName;

示例效果:


常量

在 PHP 中,常量的值始终保持不变,常量一旦被定义就不能被修改或重新定义。

常量的命名遵循标识符的命名规则,习惯上总是使用大写字母定义常量名称。

在 PHP 中定义常量,可以使用 define 函数或 const 关键字。

define 函数的基本用法:

PHP 复制代码
define(常量名, 常量值);

const 关键字的基本用法:

PHP 复制代码
const 常量名 = 常量值;

示例:常量

入口页面(index.php):

PHP 复制代码
<?php
define("HOST", "localhost");
define("PORT", "3306");

const USER = "root";
const PASSWORD = "root";

echo "HOST=", HOST, "<br>";
echo "PORT=", PORT, "<br>";
echo "USER=", USER, "<br>";
echo "PASSWORD=", PASSWORD, "<br>";

示例效果:


预定义常量

PHP 提供了预先定义好的常量来获取 PHP 中的信息。

PHP 中的基本预定义常量:

名称 描述
FILE 获取 PHP 文件的完整路径
LINE 获取 PHP 文件中当前代码的行号
PHP_VERSION 获取 PHP 的版本信息
PHP_OS 获取当前 PHP 环境的操作系统类型
PHP_INT_MAX 获取当前 PHP 环境中整型数的最大值
PHP_INT_SIZE 获取 PHP 中整型数的字长
TRUE 该常量是一个真值(true)
FALSE 该常量是一个假值(false)
NULL 该常量是一个空值(null)
E_ERROR 表示运行时的致命性错误,值为 1
E_WARNING 表示运行时的警告错误,值为 2
E_PARSE 表示编译时的解析错误,值为 4
E_NOTICE 表示编译时的题型信息,值为 8

示例:预定义常量

入口页面(index.php):

PHP 复制代码
<?php
echo "PHP版本号:", PHP_VERSION, "<br>";
echo "PHP文件路径:", __FILE__, "<br>";

示例效果:


表达式

表达式是 PHP 中非常重要的基石,任何有值的内容都可以理解为表达式。

PHP 的基本表达式:

PHP 复制代码
<?php
$a = 1;
echo $a + 1;
$a = $a + 4;
echo $a + $b;
echo PHP_VERSION;

数据类型

常用数据类型

PHP 支持 3 类数据类型,8 种数据类型。

名称 描述
标量类型 bool 布尔型 值为 true/false,且不分大小写
int 整型 可用八进制、十进制、十六进制表示 在不同位数的操作系统中,取值范围不一样 当定义的整型数值大于系统的整型数所能表示的最大范围时,将会被自动转换为浮点数
float 浮点型 可用标准格式和科学计数法表示
string 字符串型 可用单引号、双引号、heredoc、nowdoc 表示
复合类型 array 数组 支持单维和多维数组
object 对象 可以用来表示具体的实体或抽象的概念
特殊类型 resource 资源 用于表示对外部资源的引用 外部资源可以是文件、图像、数据库连接等
NULL 空值 表示一个变量没有被赋予任何值

字符串数据类型

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

在 PHP 中,可以使用单引号、双引号表示字符串。

  • 单引号字符串中的变量不会被解析。
  • 双引号字符串中的变量会被解析。

示例:字符串数据类型

入口页面(index.php):

PHP 复制代码
<?php
$number = 100;

echo '$number=', $number;
echo '<br>';
echo "$number=", $number;

示例效果:


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

为了让 PHP 识别变量,可以使用 {} 符号将变量包裹起来,{} 符号中的内容会被识别成具体的变量。


示例:使用 {} 识别变量

入口页面(index.php):

PHP 复制代码
<?php
$ap = "test";

// 将$ap识别成一个变量
echo "{$ap}ple";

示例效果:


heredoc 和 nowdoc

在 PHP 中,heredoc 和 nowdoc 是两种特殊的字符串表示方式。

  • heredoc 允许在其中进行变量解析和使用特殊字符。
  • heredoc 中,位于开始标记和结束标记之间的变量可以被正常解析,变量不需要用连接符来拼接。
  • nowdoc 类似于 heredoc ,但它不会解析变量和特殊字符。
  • nowdoc 定义的变量不会被解析,会被原样输出。

使用 heredoc 定义字符串数据的基本用法:

PHP 复制代码
>>>EOD
// ...
EOD;

使用 nowdoc 定义字符串数据的基本用法:

PHP 复制代码
>>>'EOD'
// ...
EOD;

在使用 heredoc 和 nowdoc 时,需要注意:

  • 开始标记和结束标记使用相同的字符串,通常以大写字母来写。
  • 开始标记后不能出现空格或多余的字符。
  • 结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号。

heredoc 和 nowdoc 在处理大段的文本内容时非常有用,能使代码更加清晰易读。


示例:heredoc 和 nowdoc

入口页面(index.php):

PHP 复制代码
<?php
$name = "PHP";

$heredoc = <<<EOD
    <div>
        <h3>$name 是世界上最好的语言</h3>
    </div>
EOD;
echo $heredoc;

$nowdoc = <<<'EOD'
    <div>
        <h3>$name 是世界上最好的语言</h3>
    </div>
EOD;
echo $nowdoc;

示例效果:


数据类型检测

为了检测数据类型是否符合预期,PHP 提供了一组 is_xxx 形式的内置函数用于检测数据类型。

数据类型检测的基本函数:

名称 描述
is_bool($var) 是否是布尔型
is_string($var) 是否是字符串型
is_float($var) 是否是浮点型
is_int($var) 是否是整型
is_null($var) 是否是空值
is_array($var) 是否是数组
is_resource($var) 是否是资源型
is_object($var) 是否是对象型
is_numeric($var) 是否为数字或由数字组成的字符串

示例:数据类型检测

入口页面(index.php):

PHP 复制代码
<?php
var_dump(is_bool("1"));
echo "<br>";

var_dump(is_numeric("1"));
echo "<br>";

var_dump(is_string("1"));

示例效果:


自动数据类型转换

自动数据类型转换是指当参数与运算的两个数据类型不同时,PHP 会自动转换成相同的类型再进行运算。

自动转换成布尔型时:

  • 整型 0、浮点型 0、空字符串、字符串 0 转换成布尔型时,都会被转换成 false。
  • 其他数据转换成布尔型时,都会被转换成 true。

示例:自动转换成布尔型

入口页面(index.php):

PHP 复制代码
<?php
var_dump(0 == false);
echo "<br>";

var_dump(0.0 == false);
echo "<br>";

var_dump('' == false);
echo "<br>";

var_dump("0" == false);

示例效果:


自动转换成整型时:

  • 当浮点型数据转换成整型时,将直接对浮点数向下取整。
  • 当布尔型数据转换成整型时,true 会被转换成整型 1,false 会被转换成整型 0。
  • 在 PHP 8 以前,当字符串型数据转换成整型时,若字符串以数字开始,则使用该数字,否则转换为 0。
  • 自 PHP 8 起,如果无法解释运算符前后的其中一个运算对象,则会抛出 TypeError。

示例:自动转换成整型

入口页面(index.php):

PHP 复制代码
<?php
var_dump(true + 1);
echo "<br>";

var_dump(false + 1);
echo "<br>";

var_dump("101PHP" + 1);
echo "<br>";

var_dump("PHP101" + 1);

示例效果:


自动转换成字符串型时:

  • 当布尔值数据转换成字符串型时,true 会被转换成字符串型 1,false 会被转换成空字符串。
  • 当整型或浮点型数据转换成字符串型时,直接将数字转换成字符串形式。

示例:自动转换成字符串型

入口页面(index.php):

PHP 复制代码
<?php
var_dump("true => " . true);
echo "<br>";

var_dump("false => " . false);
echo "<br>";

var_dump(101 . "PHP");
echo "<br>";

var_dump(3.14 . "PHP");

示例效果:


强制数据类型转换

强制数据类型转换是将某个数据或变量转换成想要的数据类型。

强制数据类型转换的基本用法:

PHP 复制代码
(目标数据类型) 变量或数据

示例:强制数据类型转换

入口页面(index.php):

PHP 复制代码
<?php
var_dump((boolean) -1);
echo "<br>";

var_dump((integer) "hello");
echo "<br>";

var_dump((float)false);
echo "<br>";

var_dump((string)101);

示例效果:


数据类型转换函数

PHP 提供了一系列数据类型转换函数,用于获取变量或数据的指定类型的值。

数据类型转换的基本函数:

名称 描述
strval($var) 获取字符串型的值
intval($var) 获取整型的值
floatval($var) 获取浮点型的值
boolval($var) 获取布尔型的值

示例:数据类型转换

入口页面(index.php):

PHP 复制代码
<?php
var_dump(strval(false));
echo "<br>";

var_dump(intval("101"));
echo "<br>";

var_dump(floatval("0"));
echo "<br>";

var_dump(boolval("1"));

示例效果:


运算符

算数运算符

PHP 的基本算数运算符:

运算符 描述 运算符 作用
+ -
* /
% 取模 ** 幂运算

赋值运算符

PHP 的基本赋值运算符:

运算符 描述 运算符 描述
= 赋值 += 加并赋值
-= 减并赋值 *= 乘并赋值
/= 除并赋值 % 取模并赋值
.= 连接并赋值 **= 幂运算并赋值

比较运算符

PHP 的基本比较运算符:

运算符 描述 运算符 描述
== 等于 != 不等于
<> 不等于 === 全等
!== 不全等 > 大于
>= 大于等于 < 小于
<= 小于等于

使用 PHP 的比较运算符时需要注意:

  • 对数据类型不相同对两个数据进行比较时,PHP 会自动将其转换成类型相同的数据再进行比较。
  • === 和 !== 运算符在进行比较时,不仅要比较数值是否相等,还要比较数据类型是否相同。
  • == 和 != 运算符在进行比较时,只比较数值是否相等。

三元运算符

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

三元运算符的基本用法:

PHP 复制代码
条件表达式 ? 条件表达式成立时执行 : 条件表达式不成立时执行

逻辑运算符

PHP 的基本逻辑运算符:

运算符 描述 运算符 描述
&&
! xor 异或
and or

递增/递减运算符

PHP 基本的递增/递减运算符:

运算符 描述 运算符 描述
++ 递增 -- 递减

使用 PHP 的递增/递减运算符时需要注意:

  • 递增/递减运算符只针对纯数字或字母(a-z、A-Z)进行运算。
  • 对于值为字母的变量,只支持递增操作。
  • 当操作数为布尔型类型的数据时,递增/递减操作对其值不产生影响。
  • 当操作数为 NULL 时,递增的结果为 1,递减不受影响。

字符串拼接运算符

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

当使用字符串拼接运算符拼接布尔型、整型、浮点型或 NULL 时,会被自动转换成字符串型。


示例:字符串拼接

入口页面(index.php):

PHP 复制代码
<?php
echo "Hello"."PHP";

位运算符

PHP 中的位运算符用于对二进制位(0 和 1)进行操作。

PHP 的基本位运算符:

运算符 名称 描述
& 按位与 如果两个二进制位都为 1,则该位的运算结果为 1,否则为 0
按位或
~ 按位非 如果二进制位时 0,则取反值 1。 如果二进制位时 1,则取反值 0
^ 按位异或 如果两个二进制位相同,则该位的运算结果为 0,否则为 1
<< 左移 将所有二进制位向左移动 1 位,右边的空位补 0,左边移走的部分舍去
>> 右移 将所有二进制位向右移动 1 位,左边的空位根据原数的符号补位 0 或 1,原数是负数就补 1,原数是正数就补 0

示例:位运算符

入口页面(index.php):

PHP 复制代码
<?php
$m = 1; // 二进制为01
$n = 2; // 二进制为10

// 按位与
$mn_and = $m & $n;
echo "按位与结果:" . $mn_and . "<br>";

// 按位或
$mn_or = $m | $n;
echo "按位或结果:" . $mn_or . "<br>";

// 按位异或
$mn_xor = $m ^ $n;
echo "按位异或结果:" . $mn_xor . "<br>";

// 按位取反
$m_not = ~$m;
echo "按位取反结果:" . $m_not . "<br>";

$m = 3;
// 左移
$m_left_shift = $m << 1;
echo "左移结果:" . $m_left_shift . "<br>";

$m = 8;
// 右移
$m_right_shift = $m >> 2;
echo "右移结果:" . $m_right_shift . "<br>";

示例效果:


位运算可以用于优化一些特定的操作,例如在处理标志位、进行高效的位掩码操作或利用位移实现快速的乘除运算等场景中。

错误控制运算符

错误控制运算符用于在可能出现错误的表达式前使用,不会直接将错误显示给用户。

错误控制运算符的基本用法:

php 复制代码
@表达式;

在 PHP8 中,错误控制运算符已经被弃用。

流程控制

分支结构

PHP 中的分支结构常用的有 if、if-else、if-elseif-else、switch-case。

if 语句的基本用法:

PHP 复制代码
if(条件表达式) {
	// ...
}

if-else 语句的基本用法:

PHP 复制代码
if(条件表达式) {
	// ...
} else {
	// ...
}

if-elseif-else 语句的基本用法:

PHP 复制代码
if(条件表达式) {
	// ...
} elseif(条件表达式) {
	// ...
} else {
	// ...
}

switch-case 语句的基本用法:

PHP 复制代码
switch(表达式) {
	case 值1:
		// ...
		break;
	case 值2:
		// ...
		break;
	// ...
	default:
		// ...
}

循环结构

PHP 中的循环结构常用的有 while、do-while、for。

while 语句的基本用法:

PHP 复制代码
while(循环条件) {
	// ...
}

do-while 语句的基本用法:

PHP 复制代码
do{
	// ...
} while(循环条件);

for 语句的基本用法:

PHP 复制代码
for(初始化表达式; 循环条件; 操作表达式) {
	// ...
}

跳转语句

PHP 中的跳转语句常用的有 berak、continue。

  • break 语句在循环语句中用于终止、跳出循环。
  • continue 语句在循环语句中用于结束本次循环,开始下一轮循环。

流程控制代替语句

在 HTML 模板中嵌入 PHP 代码时,流程控制替代语句是一种可读性更好的语法。

流程控制语句和流程控制替代语句的比较:

流程控制语句 流程控制替代语句
if(条件表达式) { // ... } if(条件表达式): // ... endif;
switch(表达式) { // ... } switch(表达式): // ... endswitch;
while(循环条件) { // ... } while(循环条件): // ... endwhile;
for(初始化表达式; 循环条件; 操作表达式) { // ... } for(初始化表达式; 循环条件; 操作表达式): // ... endfor;

示例:流程控制替代语句

入口页面(index.php):

PHP 复制代码
<h3>10以内的偶数列表</h3>
<ul>
    <?php
    for ($i = 0; $i < 10; $i++) {
        if ($i % 2 == 0) {
            echo "<li>$i</li>";
        }
    }
    ?>
</ul>

<h3>10以内的偶数列表</h3>
<ul>
    <?php for ($i = 0; $i < 10; $i++): ?>
        <?php if($i % 2 == 0): ?>
            <li><?php echo $i ?></li>
        <?php endif; ?>
    <?php endfor; ?>
</ul>

示例效果:


文件包含语句

include 和 require

include 语句和 require 语句都可以引入一个外部文件。

  • include 语句和 require 的用法类似。
  • 当引入外部文件出现错误时,icnlude 语句会发出警告信息,程序继续执行。
  • 当引入外部文件出现错误时,require 语句会抛出致命错误,程序停止运行。

使用 include 语句引入公共代码的基本用法:

PHP 复制代码
include '完整路径文件名';
include('完整路径文件名');

使用 require 语句引入公共代码的基本用法:

PHP 复制代码
require '完整路径文件名';
require('完整路径文件名');

示例:include 和 require

工具类(util.php):

PHP 复制代码
<?php
echo "这是工具类 util.php";

入口页面(index.php):

PHP 复制代码
<?php
include './util.php';

echo "<br>Hello PHP";

示例效果:


include_once 和 require_once

include_once 语句和 require_once 语句也可以引入一个外部文件。

  • 使用 include_once 语句和 require_once 语句引入外部文件时,PHP 会检查该文件是否在程序中已经被引入。
  • 如果该已经被引入,则外部文件不会被再次引入,避免重复引入同一个文件。

示例:include_once 和 require_once

入口页面(index.php):

PHP 复制代码
<?php
echo "<p>使用include引入util.php三次:</p>";
include './util.php';
echo "<br>";
include './util.php';
echo "<br>";
include './util.php';
echo "<br>";

echo "<p>使用include_once引入util.php三次:</p>";
// 上文已经引入util.php,此处不再重复引入
include_once './util.php';
echo "<br>";
include_once './util.php';
echo "<br>";
include_once './util.php';

示例效果:


相关推荐
薛定谔的猫喵喵2 小时前
【从零构建】PHP网络安全渗透测试靶场:5大基础漏洞实战
windows·sql·web安全·php
【赫兹威客】浩哥2 小时前
【赫兹威客】Redis安装与验证教程
开发语言·php
CHU7290353 小时前
淘宝扭蛋机小程序前端功能详解:以交互设计赋能趣味体验
java·前端·小程序·php
venus603 小时前
多网卡如何区分路由,使用宽松模式测试网络
开发语言·网络·php
廋到被风吹走3 小时前
【配置中心】Nacos 配置中心与服务发现深度解析
开发语言·服务发现·php
吃辣我第一3 小时前
SuperMap GPA如何限制Spark使用端口范围
服务器·spark·php
2501_944424125 小时前
Flutter for OpenHarmony游戏集合App实战之连连看路径连线
android·开发语言·前端·javascript·flutter·游戏·php
白狐_79815 小时前
【计网全栈通关】第 5 篇:网络层核心计算——IP 地址规划、子网划分与 CIDR
网络协议·tcp/ip·php
xinxinhenmeihao18 小时前
有哪些原因会让爬虫代理IP失效?
爬虫·tcp/ip·php