本实验学习如何把重复的数据处理逻辑封装成函数,并在不同位置重复调用。
完成本实验后,应能够理解:
function- 函数名
- 参数
- 返回值
- 默认参数
- 参数类型
- 返回值类型
bool- 函数复用
- 为什么函数可以降低重复代码
05-php-function/
├── index.php
└── README.md
函数可以理解为:
给一段代码起一个名字
↓
需要时直接调用
例如:
function sayHello(): string
{
return 'Hello PHP';
}调用:
echo sayHello();参数就是传给函数的数据。
例如:
function formatPrice(float $price): string
{
return '¥' . number_format($price, 2);
}调用:
formatPrice(25.8);这里:
25.8
↓
传给 $price
↓
函数处理
↓
返回结果
输出:
¥25.80
函数可以接收多个参数:
function formatPrice(float $price, string $currency): string
{
return $currency . number_format($price, 2);
}调用:
formatPrice(25.8, '$');本实验使用:
function formatPrice(
float $price,
string $currency = '¥'
): string因为 $currency 有默认值,所以可以直接:
formatPrice(25.8);结果:
¥25.80
也可以覆盖默认值:
formatPrice(25.8, '$');结果:
$25.80
函数通常通过:
return把结果返回给调用位置。
例如:
function getDiscountPrice(
float $price,
float $discount = 0.9
): float {
return $price * $discount;
}调用:
$price = getDiscountPrice(100);结果:
90
本实验启用了:
declare(strict_types=1);并使用:
string
int
float
bool例如:
function getStockText(int $stock): string这里代表:
$stock
应该是整数
函数返回值
应该是字符串
这种写法可以让代码意图更加清晰。
本实验有一个函数:
function isPurchasable(int $stock): bool
{
return $stock > 0;
}它只返回:
true
或
false
因此可以用于条件判断:
if (isPurchasable($stock)) {
echo '可以买';
}假设页面中有 20 个地方需要格式化价格。
如果每次都写:
'¥' . number_format($price, 2)以后规则变化,就可能需要修改 20 个地方。
如果封装成:
formatPrice($price)以后只需要修改:
formatPrice()函数内部即可。
因此函数最核心的价值之一是:
减少重复
+
集中维护规则
e()负责安全输出字符串。
formatPrice()负责价格格式化。
getStockText()负责库存状态判断。
isPurchasable()负责判断商品是否可购买。
getDiscountPrice()负责计算折扣价格。
WordPress 中大量功能都是通过函数调用完成的。
例如:
the_title();
the_permalink();
get_header();
get_footer();
has_post_thumbnail();当看到:
get_header();可以把它理解为:
WordPress 已经提前定义好了一个函数
↓
我们只负责调用它
WordPress 本质上就是建立在大量 PHP 函数和类之上的系统。
WooCommerce 中也经常看到:
$product->get_name();
$product->get_price();
$product->is_in_stock();这里虽然已经涉及对象和方法,但思想与函数非常接近:
传入数据
或
读取对象数据
↓
执行内部逻辑
↓
获得结果
OOP 会在后期进阶阶段再单独学习。
将:
$discount = 0.9修改为:
$discount = 0.8观察价格变化。
例如:
function getProductLabel(float $price): string
{
return $price >= 30 ? '高价产品' : '普通产品';
}然后在页面中调用。
调用:
formatPrice($price, '$');观察默认参数如何被覆盖。
这一章最重要的是理解:
重复逻辑
↓
封装成函数
输入数据
↓
参数
处理数据
↓
函数内部
输出结果
↓
return
因此可以形成一个非常重要的 PHP 编程习惯:
页面负责展示,重复的数据处理规则尽量放到函数中。
到这里已经完成 PHP 基础阶段的前五个实验:
01 基础输出与变量
02 数组
03 条件判断
04 循环
05 函数
它们共同组成:
变量
↓
数组保存数据
↓
条件判断数据
↓
循环处理数据
↓
函数封装逻辑
这是后面 PHP Web 开发的基础。
06 - PHP 页面模块化
下一章开始进入 PHP Web 开发阶段,重点学习:
includerequireinclude_oncerequire_once- header / footer 拆分
- 公共页面模块复用
并开始理解 PHP 项目的多文件结构。