批改状态:合格
老师批语:代码写的挺好,很熟练!文章正文重点可以加粗,但不要放大。
函数名称以字母或下划线开头(不能以数字开头),标识符必须满足php标识符的基本要求,只允许字母数字或下划线且不允许数字开头
function 函数名称标识符(参数){执行语句,也可以为空return 将函数的执行结果返回到调用者}
调用:按名称调用
<?phpfunction modf (int $a,int $b){return $a % $b;}echo modf(7,3);
<?phpfunction show (int $d):string{if ($d >=6){return '今天休息';}elsereturn '今天上班';}echo show(5);
<?php$str ="sdfEERR";//全部转为小写echo strtolower($str);
| 系统函数函数 | 功能 |
|---|---|
| substr | 字符串截取 |
| mb_substr | 多字节截取 |
<?php// 可变函数,把函数名变为一个变量function username(string $name){return $name;}$var = 'username';// 普通用函数名调用函数echo username('admin'),'<hr>';// 用可变函数变量名调用,即用$var中的值代替了函数名调用函数echo $var('master'),'<hr>';
拥有名称的函数叫:命名函数/具名函数
无名的叫匿名函数
匿名函数/闭包,在php中也称为闭包,可以访问父作用域中的变量 function (参数) use ($外部变量){
}
<?php$tax =function(float $money ,float $t):float{return $money * $t ;};echo "个人所得税应缴:" . $tax(18000,0.05).'元';
<?php$passlevel = 60;// 这是一个全局变量$test = function(int $level) use($passlevel):string{if ($level > $passlevel)return "恭喜通过测试";elsereturn "要继续加油哦";};echo $test(59),'<hr>';//这里函数只需要输入一个参数就可以完成,比较的值是全局变量中设置的,如果标准改为70合格,也不用改函数的代码
<?php$pass = function ($passlevel) {// 当父作用域是父函数时passlevel是父函数的变量$test = function(int $level) use($passlevel):string{//使用匿名函数访问父作用域中的变量时,一定要在匿名函数后面加上"use(父作用域中的变量)if ($level > $passlevel)return "恭喜通过测试";elsereturn "要继续加油哦";};return $test;};echo $pass(60)(70),'<hr>';//这里函数只需要输入两个参数才可以完成,调用父函数名就行,第一个参数是父函数的参数,设置及格线,第二个括号中的参数是给子函数的,设置判断的分数
函数必须要有返回值
函数只能返回单一的值
重点放在多值返回
<?php// 1.字符串拼装function test1(): string{$name = 'admin';$code = '通过验证';return $name . $code;}echo test1(),'<hr>';// 2.通过数组返回function test2():array{$str1 = 'nanjing';$str2 = 'beijing';return ['point1' => $str1,'point2' => $str2];}print_r(test2());echo '<hr>';// 3.通过json返回,json是js对象字面量的字符串表示json_encode<->json_decodefunction test3():string{$code = 1;$message = '登录成功';return json_encode(['code'=>$code,'msg'=>$message]);//返回以json格式封装的字符串}// 还原后变为json的对象print_r(json_decode(test3()));echo '<hr>';// 4.序列化serialize方式返回,serialize<->unserializefunction test4():string{$username = 'emagic';$sex = '男';return serialize(['username' => $username,'sex' => $sex]);}echo test4(),'<br>';//返回的是序列化编码的格式数据print_r(unserialize(test4()));// 反序列化后还原为数组echo '<hr>';
&,函数内部对参数的更新实时映射到外部实际参数
<?php// 值参数,默认方式function modf (int $a,int $b){return $a % $b;}echo modf(7,3);echo '<hr>';// 默认参数:即便用户不给参数的时候就给定参数一个默认取值,避免函数报错function getusername(string $username = 'admin'):string{return $username;}// 调用时不传参数会输出默认参数值echo getusername(),'<hr>';// 引用参数,在参数前面加上取地址符&function reffunc(&$parm1){return $parm1 *= 2;//加上取地址符后的参数,其值变化也会使函数外部的值产生变化}$parm2 = 50; //parm2初始化是给50echo reffunc($parm2),'<br>';echo $parm2; //这里的parm2输出结果变为了100,不再是50了echo '<hr>';// 剩余参数// 当调用得参数 数量不确定时 参数前面加三个...function uncountable(...$args){return array_sum($args);//array_sum为数组求和函数}$res = uncountable(1,2,3,4,5,6,7,8,9,10);print_r($res);
<?php// 函数的命名空间// 1. 命名空间namespace ns1{function calc(int $a, int $b):int{return $a * $b;}}// 这里分别在两个不同的空间ns1和ns2命名了一个同名的calc函数,解决了命名冲突问题namespace ns2 {function calc(int $a, int $b):int{return $a + $b;}}// 2. 全局空间中访问namespace{echo ns1\calc(3,5);echo '<hr>';echo ns2\calc(3,5);}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号