Correction status:qualified
Teacher's comments:你可能举个不同的案例呢, 上课是相加, 你改个相乘或除法也行呀, 不要原样照抄了...., 学到这么久了, 要有点自己的想法了
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]);
点击 "运行实例" 按钮查看在线实例