PHP 基础案例教程之 03-函数 - 指南

函数的定义与调用

初识函数

在程序开发中,通常通过定义一个函数来实现特定的功能,从而使代码可以被复用,避免重复编写相同功能的代码。

函数的基本用法:

function 函数名([$参数1, $参数2]) {
    函数体
    [return 函数返回值;]
}

对于函数而言,设置参数的方式不同,其调用方式也不同。

无参函数

定义无参数的函数时,不需要传递参数,函数体用于完成指定的功能。


示例:无参函数

入口页面(index.php):

示例效果:


有参函数

定义有参数的函数时,函数内部会根据用户传递的参数进行操作。


示例:有参函数

入口页面(index.php):

示例效果:


引用传参

当需要函数修改它的参数值时,需通过函数参数的引用传递来实现,即引用传参。

在函数中使用引用传参的基本用法:

function 函数名(&$参数) {
    函数体
    [return 函数返回值;]
}

示例:引用传参

入口页面(index.php):

示例效果:


参数默认值

在设置函数参数时,还可以为其指定默认值,即可选参数,当调用者未传递该参数时,函数将使用默认值进行操作。

指定函数的参数默认值的基本用法:

function 函数名($参数 = 参数默认值) {
    函数体
    [return 函数返回值;]
}

示例:参数默认值

入口页面(index.php):

示例效果:


参数类型

在自定义函数时,可以指定参数具体是哪种数据类型。

  • 在 PHP 5 中不能直接指定诸如整数、浮点数、字符串等基本数据类型作为参数类型。
  • 在 PHP 7 中,类型声明得到了显著增强,可以更精确地指定各种基本数据类型。

一般情况下,指定参数类型的方式是弱类型参数设置,在调用函数时,如果传递的参数不是指定的类型,程序会将其强制转换成指定类型再进行操作。

设置函数的弱类型参数的基本用法:

function 函数名(参数类型 $参数) {
    函数体
    [return 函数返回值;]
}

示例:参数类型

入口页面(index.php):

示例效果:


在 PHP 中,还可以将函数参数设置为强类型参数,当用户传递的参数类型不符合函数的定义时,程序会报错提醒。

设置函数的强类型参数的基本用法:

declare(strict_types = 1);
function 函数名(参数类型 $参数) {
    函数体
    [return 函数返回值;]
}

示例:设置函数的强类型参数

入口页面(index.php):

示例效果:


可变参数列表

从 PHP 5.6 及以上版本开始,在定义函数时,可以指定可变参数列表,即函数可以接受不定数量的参数。

指定函数的可变参数列表的基本用法:

function 函数名(...$参数) {
    函数体
    [return 函数返回值;]
}

在指定函数的可变参数列表时,需要注意:

  • 可变参数列表只能用在参数列表的末尾。
  • 可变参数列表的数量可以为 0,但不能省略。
  • 在使用可变参数列表时,函数会自动将参数转化为数组,可以使用数组相关的函数来操作这些参数。

示例:可变参数列表

入口页面(index.php):

示例效果:


函数返回值类型

从 PHP 7 开始,引入了对函数返回值类型声明的强大支持,允许明确指定函数返回的数据类型。

指定函数返回值类型的基本用法:

declare(strict_types = 1);
function 函数名(参数类型 $参数) : 返回值类型 {
    函数体
    [return 函数返回值;]
}

示例:函数返回值类型

入口页面(index.php):

示例效果:


函数中变量的作用域

变量只有在其作用范围内才可以被使用,这个作用范围称为变量的作用域。

  • 在函数中定义的变量称为局部变量,在函数外定义的变量称为全局变量。
  • 默认情况下,在函数中不能使用全局变量。
  • 局部变量的改变,不会对全局变量有任何影响。

示例:函数中变量的作用域

入口页面(index.php):

 '.test();
echo "
"; echo '$sum => '.$sum;

示例效果:


若要在函数中使用全局变量,可以使用 global 关键字或超全局变量 $GLOBALS。

global 关键字的基本用法:

function 函数名() {
    global $全局变量名;
}

超全局变量 $GLOBALS 的基本用法:

function 函数名() {
    $GLOBALS['全局变量名'];
}

示例:全局变量

入口页面(index.php):

 '.$sum1;
    echo "
"; echo '全局变量 $sum2 => '.$GLOBALS['sum2']; } test();

示例效果:


函数的嵌套调用

嵌套调用

嵌套调用是指在调用一个函数的过程中,调用另一个函数。


示例:嵌套调用

入口页面(index.php):

";
echo avg(78, 56);

示例效果:


递归调用

递归调用时函数嵌套中的一种特殊的调用,是指函数在其函数题内调用自身的过程。


示例:递归调用

入口页面(index.php):

示例效果:


函数的高级应用

静态变量

在 PHP 函数中,执行完函数后,在函数中定义的变量会被释放或者被重新赋值,若想在函数执行完成后依然保留局部变量的值,可以使用静态变量。

静态变量的基本用法:

static $变量名 = 变量值;

示例:静态变量

入口页面(index.php):

";
for($i = 0; $i < 5; $i++) {
    echo num2().", ";
}

示例效果:


可变函数

可变函数就是将一个变量变成一个函数的形式,PHP 会自动寻找与变量值同名的函数,并且尝试执行它。

可变函数的基本用法:

$变量名 = 变量值;
$变量名();

在使用可变函数时,需要注意:

  • 变量值可以是用户自定义的函数名称,也可以是 PHP 内置的函数名称,但是变量值必须是实际存在的函数的名称。
  • 使用可变函数可以增加程序的灵活性,但是滥用可变函数会降低 PHP 代码的可读性。

示例:可变函数

入口页面(index.php):

示例效果:


回调函数

回调函数是指将一个函数作为参数传递给另一个函数,然后在适当的时候被调用执行。


示例:回调函数

入口页面(index.php):

示例效果:


回调函数具有很大的灵活性和实用性,可以用于数据排序、数组过滤、文件处理等场景。

匿名函数

匿名函数就是没有函数名称的函数,也称为闭包函数,其强调的是函数本身没有名称,需要通过变量来引用和使用。

匿名函数的基本用法:

$变量名 = function() {
    函数体
    [return 函数返回值;]
};
$变量名();

示例:匿名函数

入口页面(index.php):

示例效果:


若要在匿名函数中使用外部的变量,可以使用 use 关键字来实现。

匿名函数使用外部变量的基本用法:

$变量名 = function() use ($变量名) {
    函数体
    [return 函数返回值;]
};
$变量名();

示例:匿名函数使用外部变量

入口页面(index.php):

示例效果:


匿名函数还可以作为函数的参数传递,实现回调函数。


示例:匿名函数作为函数的参数传递

入口页面(index.php):

";
echo calculate(10, 20, function ($a, $b) {
    return $a * $b;
});

示例效果:


PHP 内置函数

字符串函数

字符串的基本函数:

名称描述
strlen($string)获取字符串的长度,一个英文字符、一个空格的长度均为 1
UTF-8 字符集的中文字符长度为 3
GBK 字符集的中文字符长度为 2
mb_strlen($string)获取字符串的长度,1 个中文字符长度为 1
在使用该函数时,需确保 PHP 配置文件开启 mbstring 扩展
strpos($string, $find)在字符串中查找另一个字符串首次出现的位置
strrpos($string, $find)在字符串中查找另一个字符串最后一次出现的位置
str_replace($find, $replace, $string)替换字符串中的一些字符
substr_replace($string, $replace, $start)替换字符串的一部分
substr($string, $start, $length)截取字符串的一部分
explode($separator, $string)将字符串按照指定的分隔符分割成数组
implode($separator, $array)将数组元素连接成一个字符串
trim($string, $charlist)去除字符串两端的空白字符或其他预定义字符
str_repeat($string, $repeat)重复指定的字符串指定的次数
strcmp($string1, $string2)比较两个字符串是否相等
该函数二进制安全,且区分大小写,函数返回 0 即字符串相等

示例:字符串函数

入口页面(index.php):

strlen+mb_strlen获取字符串长度:
$str1:
$str1的长度是:
$str1的长度是:

strpos+strrpos+substr截取字符串:
$str2:
"duozai" 第一次出现的位置:
"/" 最后一次出现的位置:
截取文件名:

str_replace+substr_replace+str_repeat替换字符串:
$str3:
将 "+00" 替换成 "+86" :
将手机号中间四位替换成*:

explode+implode转换数组与字符串:
$str4:
将字符串转换成数组:
将数组转换成字符串:

trim去除字符串两端符号
$str5:
去除两端逗号:

strcmp判断字符串是否相等
$str6:
$str7:
$str6与$str7是否相等:

示例效果:


数学函数

数学的基本函数:

名称描述
abs($number)返回一个数的绝对值
ceil($number)返回一个数向上取最接近的整数
floor($number)返回一个数向下取最接近的整数
round($number)返回一个数的四舍五入的整数
min(…$value)返回一个数组中的最小值,或者几个指定值中的最小值
max(…$value)返回一个数组中的最大值,或者几个指定值中的最大值
pi()返回圆周率的值
pow($x, $y)返回一个数的指定次幂
sqrt($number)返回一个数的平方根
rand($min, $max)返回一个随机整数

示例:数学函数

入口页面(index.php):

-123的绝对值是
19.8向上取整是
19.8向下取整是
19.8四舍五入是
2, 4, 8的最小值是
2, 4, 8的最大值是
圆周率的值是
2的3次方是
9的平方根是
1-100的随机数是

示例效果:


时间和日期函数

PHP 通过 UNIX 时间戳处理时间,UNIX 时间戳定义了从格林尼治时间 1970 年 1 月 1 日 0 时 0 分 0 秒起至当前时间的总秒数。

时间和日期的基本函数:

名称描述
time()获取当前的 UNIX 时间戳
date($format[, $timestamp])格式化一个本地时间或日期
mktime($hour, $minute, $second, $month, $day, $year)获取指定日期的 UNIX 时间戳
strtotime($string)将字符串转换成 UNIX 时间戳
microtime()获取当前 UNIX 时间戳和微秒数

日期时间格式的基本字符:

‍

名称描述
年Y4 位数字表示的完整年份
y2 位数字表示的年份
L是否为闰年,1 是/0 否
月m数字表示的月份,有前导 0,返回值 01-12
n数字表示的月份,无前导 0,返回值 1-12
t给定月份所应有的天数,返回值 28-31
F完整英文单词表示的月份
M三个字母缩写表示的月份
日d月份中的第几天,有前导 0,返回值 01-31
j月份中的第几天,无前导 0,返回值 1-31
时间g小时,12 小时制,无前导 0,返回值 1-12
h小时,12 小时制,有前导 0,返回值 01-12
G小时,24 小时制,无前导 0,返回值 0-23
H小时,24 小时制,有前导 0,返回值 00-23
i分钟,有前导 0,返回值 00-59
s秒数,有前导 0,返回值 00-59
星期N星期几,返回值 1(星期一)-7(星期日)
w星期几,返回 0(星期日)-6(星期六)
D三个字母缩写表示的星期
l完整英文单词表示的星期

示例:时间和日期函数

入口页面(index.php):

当前时间戳:
当前时间戳和微秒:
当前日期:
2024年07月11日 08:00:00的时间戳:
2024年07月11日 08:00:00的时间戳:

示例效果:


posted @ 2026-03-07 11:26  clnchanpin  阅读(11)  评论(0)    收藏  举报