函数的含义:
- 代码复用的重要手段
- 函数名称以字母或下划线开头(不能以数字开头)
- 函数的名称应该提示出它的功能
1.函数的声明与调用
1.1 函数的声明语法
使用function进行声明:
function 函数名称的标识符(参数列表) {
函数体:(由一条或多条语句组成,也可以为空)
}
标识符:必须满足php标识符的基本要求,只允许字母数字或下划线且不允许用数字开头
1.2函数的调用
<?php
// 函数的声明与调用
function sum (float $a,float $b){
return $a + $b;
}
echo sum (5,15);
输出结果:
2.函数的类型
2.1 用户自定义函数
是由用户自定义函数以及参数
<?php
// 用户自定义函数
// 自定义函数以及参数
function sum(float $count,float $money){
return $count*$money;
}
echo sum(10,299);
输出结果:
2.2 系统函数
为系统自带的函数,无需定义可以直接使用;(举以下几个例子)
<?php
$str = "php中文网";
echo mb_substr($str, 0, 6);
echo '<hr>';
// rand():得到一个随机数; 例如:echo rand(1,10);
echo rand(1,10) . '<hr>';
// time():获取当前时间对应的时间戳;
echo time().'<hr>';
//strotlower()所有字符都转为小写(仅针对英文字母)
echo strtolower('ASDFGHJKL').'<hr>';
//round()将数字四舍五入
echo round(5.6).'<br>';
echo round(5.2).'<hr>';
输出结果:
这里只是一部分,系统函数还有很多,如果需要可前往:php中文网 查询
2.3 可变函数
<?php
// 可变函数
function sum (float $a,float $b){
return $a + $b;
}
// 将函数定义一个变量名称
$sum1 = 'sum';
// 使用可变变量输出
echo $sum1(5,15).'<hr>';
// 再用函数输出结果相同
echo sum(5,15);
输出结果:
2.4 匿名函数
也被称之为‘闭包’;
<?php
// 匿名函数
$sum = function(float $a,float $b):float {
return $a + $b;
};
echo $sum(5,15);
echo '<hr>';
// 闭包可以从父作用域中继承变量
// 使用use()继承夫作用域变量
$sum1 = 'php.cn';
$sum2 = function() use($sum1) {
return $sum1;
};
echo $sum2();
输出结果:
3.函数的返回(重点在于多值返回)
3.1 通过字符串拼装返回多值
<?php
// 字符串拼装
function demo1(): string{
$name = 'peter';
$age = 20;
return $name . ',' . '年龄:' . $age;
}
echo demo1();
输出结果:
3.2 通过数组的方式返回多值
<?php
// 数组
function demo(): array
{
$id = 1;
$username= 'peter';
return ['id'=>$id, 'name'=>$username];
}
print_r(demo());
echo '<hr>';
// 当id等于1时则返回name反则返回验证失败
echo demo()['id'] === 1 ? demo()['name'] : '验证失败';
输出结果:
3.3 通过json的方式返回多值
json:是js对象字面量的字符串表示,使用方法:json_code
<?php
// json方式
function demo1(): string{
$name = 'peter';
$age = 20;
return json_encode(['name'=>$name,'age'=>$age]);
}
echo demo1();
输出结果:
3.4 序列话方式返回多值
<?php
//序列化
function demo1(): string{
$name = 'peter';
$age = 20;
return serialize(['name'=>$name,'age'=>$age]);
}
echo demo1();
//第1个元素键名为name为string类型,长度是4,值为string类型,长度是5,值为‘peter’;
//第2个元素键名为age为string类型,长度是3,值为int类型,长度是3,值为20;
echo '<hr>';
// 反序列化: 还原
print_r(unserialize(demo1()));
输出结果:
4.函数中的参数
4.1 值参数(默认)
<?php
// 函数的参数
// 1. 值参数,这是默认
function demo(float $count): float
{
// +20
return $count += 20;
}
$nav = 10;
echo demo($nav), '<hr>';
echo $nav;
输出结果:
4.2 引用参数
函数内部对参数的更新会映射到外部实际参数
<?php
// 函数的参数
// 引用参数
function demo(float &$count): float
{
// 函数内部对参数的更新会实时映射到外部实际参数
// +20
return $count += 20;
}
$nav = 10;
echo demo($nav), '<hr>';
echo $nav;
输出结果:
4.3 默认参数
凡是有默认值的参数,必须写到没有默认值参数的后面
<?php
// 函数的参数
// 默认参数
// 凡是有默认值的参数,必须写到没有默认值参数的后面
function demo(float $a, float $b, string $opt = '+'){
$i = 0;
switch ($opt) {
case '+':
$i = "$a + $b = " . ($a + $b);
break;
case '-':
$i = "$a - $b = " . ($a - $b);
break;
case '*':
$i = "$a * $b = " . ($a * $b);
break;
case '/':
$i = "$a / $b = " . ($a / $b);
break;
default:
$i = '非法操作符';
}
return $i;
}
echo demo(15,10),'<hr>';
echo demo(10,20, '*'),'<hr>';
// 使用其他字符,未识别提示非法操作字符
echo demo(10,20, '@'),'<hr>';
输出结果:
4.4 剩余参数
<?php
// 函数的参数
// 例如:一个数量不固定的数求和,参数前面加...
function demo(...$num)
{
//array_sum为数组求和函数
return array_sum($num);
}
// 定义数组
$arr = [1,3,5,7,9,11];
// 无论数组有多少个,全部进行计算
$res = demo(...$arr);
echo $res;
输出结果:
5. 函数的命名空间
注释:只要有一个代码用到命名空间那么所有代码都要用到命名空间。
<?php
// 命名空间
namespace ns1 {
function demo(){
return '空间1';
}
}
namespace ns2 {
function demo1(){
return '空间2';
}
}
// 全局空间: 匿名空间,默认空间
namespace {
function demo1(){}
echo ns1\demo();
echo '<br>';
echo ns2\demo1();
}
输出结果:
总结
- 学习了函数的类型以及函数的返回值,以及一些系统函数,后续可以查找手册了解;
- 了解了函数中的一些参数;
- 以及函数的命名空间,以及命名规范;