PHP语法基础
约 2806 字大约 9 分钟
PHPWeb后端入门
2026-03-04
1. 标识符、关键字与命名规范
在任何编程语言中,我们需要给变量、函数、类起名字,这些名字就是标识符。
标识符规则 (与JS/Python类似)
- 组成:仅可由字母、数字、下画线组成。
- 开头:不能以数字开头,以避免与数值混淆。
- 大小写:用作变量名时,区分大小写(
$Name和$name是两个不同的变量)。
PHP的命名规范 (业界约定俗成)
- 变量/函数名:推荐使用小驼峰命名法(
camelCase),例如:$userAge、calculateBmi()。 - 常量名:应该全部大写,使用下画线分隔单词,例如:
MAX_FILE_SIZE。 - 类名:使用大驼峰命名法(
PascalCase),且类名必须是名词,例如:UserController。
2. 变量与常量:数据的容器
变量 (Variables)
⚠️ PHP的灵魂特色:在PHP中,所有变量名都必须以美元符号($)开头!这与 Python 和 JS 直接声明变量名不同。PHP 是一种弱类型语言,不需要显式声明其数据类型。
变量的赋值方式
在PHP中,通过3种方式为变量赋值:直接赋值、传值赋值和引用赋值。理解它们对于后续内存管理的认知非常重要:
1. 将数字 10 赋值给变量 $a,系统为其开辟了一块内存空间。
<?php
// 1. 直接赋值 (最常见)
$name = 'Jack'; // 将字符串 'Jack' 赋给变量$name
$age = 20; // 将数字20 赋给变量$age
// 2. 传值赋值 (深拷贝思想)
// 将一个变量的值复制到另一个变量中
$x = 20;
$y = $x; // 将$x的值复制到$y中
$x = 30;
echo $y; // 输出 20。$x和$y都指向数字20,但是它们各自独立
// 3. 引用赋值 (共享内存地址)
// 在变量前添加&符号来创建一个引用,该引用指向另一个已存在的变量
$m = 20;
$n = &$m; // $n引用了$m
$m = 200;
echo $n; // 输出 200!因为$n引用的是$m的值,所以$m的变化会反映在$n上
?>可变变量 (Variable Variables)
这是 PHP 中非常独特且强大的特性。为了方便在开发时动态地改变一个变量的名称,PHP提供了一种特殊的变量—可变变量 。它需要在一个变量前多加一个 $ 符号 。
<?php
$a = 'say';
$say = 'Hello';
// $$a表示将$a的值作为变量名,即$say
echo $$a; // 输出 Hello
?>🗄️ 服务器内存空间
💻 代码执行与解析引擎
常量 (Constants)
常量是在程序运行过程中其值始终保持不变的数据 。 PHP 提供了两种定义常量的方式,以及内置的“预定义常量” 。
<?php
// 方式一:使用 define() 函数
define('PI', 3.1415926);
define('SYSTEM_NAME', 'BMI计算系统');
// 方式二:使用 const 关键字 (这种方法更为简洁)
const R = 6;
// PHP 7.0支持利用表达式对常量进行赋值
const P = 2 * R;
// 扩展:预定义常量 (魔术常量)
echo __LINE__; // 返回文件中的当前行号
echo __FILE__; // 返回文件的完整路径和文件名
?>3. 标量数据类型与检测
PHP 的数据类型可以分为 3 类,分别为标量数据类型、复合数据类型和特殊数据类型 。本节重点掌握 4 种标量类型 。
布尔型 (Boolean) & 整型 (Integer) & 浮点型 (Float)
<?php
$var1 = true; // 布尔型,true和false不区分大小写
$num2 = 123; // 整型 (十进制)
$r = 2.5; // 浮点型
// 扩展:进制表示法
$num4 = 0b1111011; // 定义二进制整型数据
$num6 = 0x7D; // 定义十六进制整型数据
?>字符串型 (String) —— 重点辨析
PHP 中可以使用单引号、双引号、heredoc 结构和 nowdoc 结构定义字符串 。
<?php
$username = '张三';
// 1. 单引号 (纯文本,不能解析字符串中的变量)
$str1 = 'Hello, $username'; // 输出:Hello, $username
// 2. 双引号 (会解析变量,类似于 JS 的模板字符串或 Python 的 f-string)
$str2 = "Hello, $username"; // 输出:Hello, 张三
// 3. heredoc 结构 (构建包含变量和HTML标签的复杂字符串)
// <<<定界符,表示heredoc结构的开始
$html = <<<EOT
<div class="user">
<p>欢迎您,{$username}!</p>
</div>
EOT; // 结束标识符与开始标识符名称相同
// 4. nowdoc 结构 (开始标识符必须由单引号引起来,字符串中的变量不会被解析)
$script = <<<'EOT'
console.log("这段文本里的 $username 不会被解析");
EOT;
?>数据类型检测函数
在弱类型语言中,我们经常需要判断变量的类型。PHP 提供了一系列函数,用于检测数据的类型 。
is_bool()、is_int()、is_float()、is_string()、is_numeric()(如果返回 true 则表示数据类型符合要求 )。- 开发利器:
var_dump()。它打印变量的相关信息,包括表达式的类型和值 。这是 PHP 开发中最常用的调试函数。
4. 运算符与表达式
大家对 JS 和 Python 的运算符已经很熟悉了,这里我们重点挑出 PHP 中易错和特色的部分进行讲解。
算术与赋值运算符
- 算术:
+、-、*、/、%(取模)、**(幂运算,例如2 ** 3输出 8) 。 - 赋值:
=、+=、-=等 。 - 字符串连接符 (⚠️ 极易错):在 PHP 中,字符串拼接使用点号
.!可以使用.=进行连接并赋值 。
<?php
$c = 'Hello';
$d = 'World';
$c .= $d; // 等同于 $c = $c . $d;
echo $c; // 输出HelloWorld
?>比较与逻辑运算符
==(等于:值相等,会发生自动类型转换) vs===(全等:值和类型都完全相同) 。&&(与)、||(或)、!(非)、xor(异或:如果两个条件中仅有一个为true,则结果为true) 。
三目运算符及其嵌套
唯一的一个三目运算符是条件运算符 。 语法:<条件表达式> ? <表达式1> : <表达式2>
<?php
// 扩展:在单个表达式中能够执行更复杂的条件逻辑
$a = 10; $b = 5; $c = 2;
// 逻辑解析:首先比较$a和$b。如果$a大于$b,接着比较$a和$c...
$result = ($a > $b) ? (($a > $c) ? $a : $c) : (($b > $c) ? $b : $c);
echo "它们中的最大值为: " . $result; // 输出 10
?>5. 常用数学函数
在进行复杂的业务逻辑计算时,单靠基础的算术运算符可能不够高效或易读。PHP 提供了极其丰富的内置全局数学函数。在本次的 BMI 计算实战中,我们重点掌握两个核心函数:
pow($base, $exp)(指数表达式函数)- 作用:计算
$base的$exp次方。 - 实战应用:身体质量指数的计算公式为 BMI=Height2Weight 。在复杂公式中,使用
pow()函数进行幂运算可以提高代码可读性 。
<?php
$height = 1.80;
// 计算 1.80 的 2 次方
$heightSquared = pow($height, 2);
echo $heightSquared; // 输出 3.24
?>round($val, $precision)(四舍五入函数)- 作用:对浮点数进行四舍五入。第二个参数
$precision用于指定需要保留的小数位数。 - 实战应用:我们需要使用数学函数对最终的浮点数结果保留两位小数 ,以提供更好的用户界面体验。
6. 数据类型的转换
当运算涉及不同数据类型的数据时,为了确保操作的正确性,经常需要将数据类型统一 。
- 自动类型转换 (隐式类型转换)
<?php
// 1. 自动转换成布尔型:空值(null)、0、false、空字符串('')、空数组(array())等会被自动转换为 false 。
var_dump('0' == false); // 输出 bool(true),字符串'0'也被视为false
// 2. 自动转换成整型参与数学计算 (⚠️与 JS 完全不同)
// 若字符串以数字开头,则转换成整型的对应数值 。
var_dump('Hello' + 1); // 输出 int(1),因为'Hello'被转换为0
?>- 强制类型转换 (显式类型转换)
通过在变量前加上 (类型) 来实现强制转换 。
<?php
// 将字符串转换为浮点型数据
$strPrice = "49.9元";
$floatPrice = (float) $strPrice; // 字符串如果以数字开头,则截取到非数字位
echo $floatPrice; // 输出 49.9
// 常用强制转换运算符:
// (int), (integer) - 转换为整型
// (bool), (boolean) - 转换为布尔型
// (float), (double), (real) - 转换为浮点型
// (string) - 转换为字符串
// (array) - 转换为数组
// (object) - 转换为对象
$num = 10;
$str = (string) $num; // 将整数 10 转换为 字符串 "10"
var_dump($str);
?>7. 综合实战项目:智能BMI计算与健身运动推荐系统
项目需求
我们需要实现以下核心功能:学生的基本信息会被保留并显示在页面上;根据 BMI 的计算公式,计算学生的 BMI;根据 BMI,分析当前学生的体重属于过轻、正常还是过重,并推荐合适的体育健身运动 。
判定标准
- BMI < 18.5 :体重过轻,需要进行增肌类健身运动 。
- 18.5 ≤ BMI ≤ 25 :体重正常,适当运动即可 。
- BMI > 25 :体重过重,建议进行减脂类有氧运动 。
核心代码实现
<?php
// ==========================================
// 智能BMI计算与健身运动推荐系统
// ==========================================
// 步骤 1:定义常量与初始化变量
// 使用 define 定义系统常量
define('SYSTEM_NAME', '智能BMI测算系统');
// 定义学生基本信息
// 在PHP中应分别使用浮点型来存储身高(米)和体重(千克)
$name = '王小明'; // 字符串型 (String)
$age = 22; // 整型 (Int)
$className = '网络1班'; // 字符串型 (String)
$height = 1.80; // 浮点型 (Float)
$weight = 88; // 浮点型 (Float)
// 步骤 2:使用数学函数计算BMI并处理数据
// 根据 BMI 公式,使用 pow() 函数进行幂运算,提高代码可读性
$bmi = $weight / pow($height, 2);
// 结合教案要求,使用数学函数对最终的浮点数结果保留两位小数
$bmi = round($bmi, 2);
// 步骤 3:业务逻辑判断(判断学生体重状况并推荐健身运动)
// 使用嵌套的三目运算符进行区间判断
$result = ($bmi >= 18.5 && $bmi <= 25)
? "体重正常,适当运动即可"
: (
($bmi < 18.5)
? "体重过轻,需要进行增肌类健身运动"
: "体重过重,建议进行减脂类有氧运动"
);
// 步骤 4:数据输出呈现
// 使用 heredoc 结构构建结构化的 HTML 输出
$htmlOutput = <<<HTML
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>系统检测报告</title>
</head>
<body>
<div style="border: 2px solid #3498db; padding: 20px; width: 400px;">
<h2 style="text-align: center;">👨⚕️ {SYSTEM_NAME}</h2>
<hr>
<p><strong>被测人员:</strong> {$name} ({$age}岁)</p>
<p><strong>所属班级:</strong> {$className}</p>
<p><strong>身高数据:</strong> {$height} m</p>
<p><strong>体重数据:</strong> {$weight} kg</p>
<hr>
<p><strong>综合计算 BMI 指数:</strong> <span style="color: red; font-weight: bold;">{$bmi}</span></p>
<div style="background-color: #ecf0f1; padding: 10px;">
<strong>👩🏫 智能运动处方:</strong><br>
{$result}
</div>
</div>
</body>
</html>
HTML;
// 打印最终构建好的HTML到浏览器
echo $htmlOutput;
?>在进行混合运算时,切记正确使用小括号来改变运算优先级 。比如计算公式 BMI=Height2Weight ,如果不使用
pow()函数,直接写成$weight / $height * $height就会导致依据 BMI 公式计算出的结果存在严重的逻辑偏差 ,因为乘法和除法是同级运算,会从左到右执行!
