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';

示例效果:


相关推荐
JaguarJack19 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo19 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack2 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理2 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082852 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe2 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
longxiangam3 天前
Composer 私有仓库搭建
php·composer
上海云盾-高防顾问3 天前
DNS异常怎么办?快速排查+解决指南
开发语言·php
ShoreKiten3 天前
关于解决本地部署sqli-labs无法安装低版本php环境问题
开发语言·php
liliangcsdn3 天前
深入探索TD3算法的推理过程
开发语言·php