批改状态:合格
老师批语:你可能举个不同的案例呢, 上课是相加, 你改个相乘或除法也行呀, 不要原样照抄了...., 学到这么久了, 要有点自己的想法了
1、函数的声明与调用
<?php
// 函数的声明与调用
function sum($a,$b){
// 函数体: 由一条或多条语句组成
// $c 声明在函数内, 叫私有变量, 局部变量
$c=0;
$c=$a+$b;
return $c;
echo $c;
}
echo sum(5,6);
echo '<hr>';
function sum1($a,$b){
// 函数体: 由一条或多条语句组成
// $c 声明在函数内, 叫私有变量, 局部变量
echo $a+$b;
}
sum1(3,2);点击 "运行实例" 按钮查看在线实例
2、函数的参数 、剩余参数
<?php
// 函数的参数
function sum($a=10,$b=20){ //a、b为形参
echo 'a='.$a." --- b=".$b.'<br>';
return $a+$b;
}
echo sum();
echo'<br>';
echo sum(6);
echo'<br>';
echo sum(5,8);//这里的5、7是实参
echo '<hr>';
// 形参是占位符, 并不是必须的,但是推荐写上
function sum1(){
// 查询当前函数传进来几个参数?
return func_num_args();
}
echo sum1();//0
echo'<br>';
echo sum1(5,6,7);//3
echo '<hr>';
function sum2(){
// 查看所有传入的参数的值,获取一个函数的所有参数
return func_get_args();
}
print_r(sum2()) ;//Array ( )
echo'<br>';
print_r(sum2(5,6,7,8)) ;//Array ( [0] => 5 [1] => 6 [2] => 7 [3] => 8 )
echo '<hr>';
function sum3(){
// 获取某一个参数的值
echo func_get_args()[0];
echo'<br>';
// 获取某一个参数值的快捷方法
echo func_get_arg(1);
echo'<br>';
//1、求和
$s1=func_get_arg(0)+func_get_arg(1)+func_get_arg(2);
echo 's1='.$s1.'<br>';
//2、求和
$s2=0;
foreach (func_get_args()as $value){
$s2+=$value;
}
echo 's2='.$s2.'<br>';
//3、求和
$s3=array_sum(func_get_args());
echo 's3='.$s3.'<br>';
}
sum3(1,2,3,4,5);
echo '<hr>';
// 剩余参数: 可变长参数
function sum4($a,$b,...$c){
echo 'a='.$a.',b='.$b.'<br>';
print_r($c);
echo '<br>';
return $a+$b+array_sum($c);
}
echo sum4(1,2,3,4,5,6);
echo '<hr>';
//比较是否设置剩余参数的区别---- 开始
function sum5($a,$b){
echo 'a='.$a.'<br>';
print_r($b);
echo '<br>';
return $a+array_sum($b);
}
$arr=[1,2,3];
echo sum5(1,$arr);
echo '<hr>';
function sum6($a,...$b){
echo 'a='.$a.'<br>';
print_r($b);
echo '<br>';
return $a+array_sum($b[0]);
}
$arr=[1,2,3,4];
echo sum6(1,$arr);
echo '<hr>';
function sum7($a,...$b){
echo 'a='.$a.'<br>';
print_r($b);
echo '<br>';
return $a+array_sum($b);
}
$arr=[1,2,3,4,5];
echo sum7(1,...$arr);
//比较是否设置剩余参数的区别---- 结束
echo '<hr>';
function sum8(int $a,...$b){ //规定$a 为整数
echo 'a='.$a.'<br>';
print_r($b);
echo '<br>';
return $a+array_sum($b);
}
$arr=[1,2,3,4,5];
echo sum8(1.8,...$arr);点击 "运行实例" 按钮查看在线实例
3、函数的返回值
<?php
// 函数的返回值
function sum1(){
return 'sum1';
}
echo sum1();
echo '<hr>';
// 如果没有return , 返回 NULL
function sum2(){
}
var_dump(sum2());
echo "<br>";
echo is_null(sum2())?'返回null':'没有返回null';
echo '<hr>';
// 函数不允许返回多个值
//若想返回多个值,就返回数组或者对象
function sum3(){
$id=1;
$name='php';
return ['id'=>$id,'name'=>$name];
}
print_r(sum3());
echo '<hr>';
// 可以限制函数的返回类型
function sum4($a,$b):int
{
echo 'a='.$a.' , b='.$b.'<br>';
return $a+$b;
}
echo sum4(1.2,1.6);点击 "运行实例" 按钮查看在线实例
4、函数中的变量访问、全局变量访问、常量访问
<?php
// 函数中的变量访问
//全局变量
$name='php';
$age=20;
//常量
define('NATION','中国');
const SITE='PHP中文网';
function demo1(){
// 在函数中不能直接访问全局变量,必须使用 global 才能访问
global $name;
echo $name.'<br>';
echo $GLOBALS['name'].$GLOBALS['age']."<br>";
//在函数中可以直接访问常量
echo NATION.'<br>';
echo SITE.'<br>';
$mobile = '15260125693';
return $mobile;
}
echo demo1();
//print_r($GLOBALS);点击 "运行实例" 按钮查看在线实例
5、匿名函数、并调用外部数据;
<?php
// 匿名函数(Anonymous functions),也叫闭包函数(closures)
// 允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。
// 匿名函数: 函数表达式
$sum=function ($a,$b){
return $a+$b;
};
echo $sum(1,2);
echo '<hr>';
// 匿名函数做为函数的回调参数来使用
$arr=[2,6,3,1,8,7];
//usort() 通过用户自定义的比较函数对数组进行排序。
usort($arr,function ($a,$b){
// return $a <=> $b; // 太空船, php7.0+
return $a-$b;
});
echo '<pre>', print_r($arr, true);
echo '<hr>';
// 获取外部数据
$name='php';
$f1=function () use ($name){
echo 'f1:name='.$name.'<br>';
$name='改变后的name,f1';
return $name;
};
echo $f1();
echo '<br>';
echo '全局:name='.$name.'<br>';
echo '<hr>';
$f2=function () use(&$name){
echo 'f2:name='.$name.'<br>';
$name='改变后的name,f2';
return $name;
};
echo $f2();
echo '<br>';
echo '全局:name='.$name.'<br>';
echo '<hr>';
// 函数允许嵌套定义
function demo(){
$age=25;
return function () use($age){
return $age;
};
}
echo demo()();
echo '<hr>';
$d=demo();
echo $d();点击 "运行实例" 按钮查看在线实例
6、回调方式来调用函数、演示call_user_func_array()的常用场景
<?php
// 函数的调用
function sum($a,$b){
return $a+$b;
}
// 传统方式
echo sum(5,3);
echo '<hr>';
// 回调方式来调用函数
echo call_user_func('sum',3,6);
echo '<br>';
echo call_user_func_array('sum',[2,8]);
echo '<hr>';
// 还可以用回调的方式来预定义函数/系统函数
print_r([1,2,3,4]);
echo '<br>';
echo call_user_func_array('print_r',[[1,2,3,4]]);
echo '<hr>';
// 还可以将对象/类中的方法以回调的方式来执行
class A
{
public function sum($a,$b){
return $a+$b;
}
public static function mul($a,$b){
return $a*$b;
}
}
$obj=new A();
echo $obj->sum(2,3);
echo '<br>';
echo call_user_func_array([$obj,'sum'],[11,22]);
echo '<br>';
echo call_user_func_array([(new A),'sum'],[1,22]);
echo '<br>';
echo call_user_func_array(['A','mul'],[5,6]);点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号