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 时间戳和微秒数
日期时间格式的基本字符:
名称 描述 年 Y 4 位数字表示的完整年份 y 2 位数字表示的年份 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的时间戳:
示例效果:

浙公网安备 33010602011771号