批改状态:合格
老师批语:可以!尽量赶上进度,作业尽量早交!
php的函数
function 函数名(参数列表) {函数体;由一条或多条语句组成,也可以为空}// 调用函数函数名();例:// 括号中的int是规定参数类型必须是整数型,:int是规定返回值必须是整数型function demo(int $a,int $b):int{// 将函数的执行结果返回到调用者return $a + $b;}// 调用函数// 按名称调用// 参数类型限制就是变量类型强制转换,把传递的参数转为整数型数值,如参数中有不可转为整数型数值的参数直接报错// 返回值类型限制相同echo demo(1,7); // 输出结果 8;
系统小函数:count():返回数组中元素的数目[就是数数组中的元素个数]例:echo count([1,2,3]); // 输出 3;
例:// $price价钱 $discount:折扣function TOTAL_PRICE(float $price,float $discount):float {return $price *= $discount; // 等同于$price = $price * $discount;}echo '实付钱='.TOTAL_PRICE(3000,0.8); // 输出 24000;
// 系统函数字符串截取函数mb_substr(截取变量名,截取开始数值,截取结束数值);$str = "函数调用机制,改进函数调用机制,通过优化参数传递环节,减少了一些指令";echo mb_substr($str,0,6); // 输出"函数调用机制"
// 将函数名作为变量值,通过变量名实现调用函数例:// $price价钱 $discount:折扣function TOTAL_PRICE(float $price,float $discount):float {return $price *= $discount; // 等同于$price = $price * $discount;}// $demo的值就是函数名可以直接通过这个变量值来调用TOTAL_PRICE这个函数$demo = 'TOTAL_PRICE';echo '实付金额='.$demo(1000,0.5),'<br>'; // 输出 5000;
// 拥有名称的函数叫做命名函数/或具名函数// 顾名思义无名称的函数就叫匿名函数// 匿名函数用个变量来承接// 注意匿名函数的结尾括号后面有个分号$变量名 = function (参数列表) {函数体;}例:$get = function (float $price,float $discount):float {return $price *= $discount;};echo '实付金额='.$get(500,0.9); // 输出 450;
例:// 这个父作用域是全局作用域$discount = 0.5;$pay = function (float $price,float $number)use($discount):float {// 总价$total_price = $price * $number;// 使用三元运算根据总价钱判断打折return $total_price > 2000 ? $total_price *= $discount : $total_price;};// 调用匿名函数echo '实付金额='.$pay(600,3); // 输出 "1800" 总价钱不够打折例:// 父作用域是父函数$f = function($discount){$pay = function (float $price,int $number)use($discount):float {// 总价$total_price = $price * $number;// echo $total_price;// 使用三元运算根据总价钱判断打折return $total_price > 2000 ? $total_price *= $discount : $total_price;};// 将子函数以返回值得方式返给调用者return $pay;};echo '实际支付金额='.$f(0.5)(1000,5); // 输出 "2500"理解$f(0.5)(1000,5):$f(0.5); $pay(1000,5);
函数的返回值
函数只能返回单一的值
例:function demo1():string {$success = 1;$defeated = '失败';return $success.'<span style="color:blue">'.$defeated.'</span>';}echo demo1(); // 输出结果 1失败[这个失败是有蓝色字体样式的]
例:function demo2():array {$success = 1;$defeated = '失败';return ['success'=>$success,'defeated'=>$defeated];}// 通过关联数组的键值来调用输出指定数组元素echo demo2()['success']; // 输出1 success的值就是1
json_encode(数组); 将数组已字符串的形式返回
json_decode(); 将对JSON格式的字符串转为数组格式
例:function demo3():string{$success = 1;$defeated = '失败';// json_encode(数组); 将数组已字符串的形式返回return json_encode(['success'=>$success,'defeated'=>$defeated]);}echo demo3(); // 输出 {"success":1,"defeated":"\u5931\u8d25"}解释:输出中的\u5931\u8d25就是失败两个字// 输出查看当前函数值的输出类型echo gettype(demo3()),'<hr>'; // 输出 string 字符串型// 将对JSON格式的字符串转为数组格式print_r(json_decode(demo3(),true));
serialize(要序列化的数组名称) 用于序列化对象或数组,并返回一个字符串
unserialize(被序列化成字符串格式的对象或数组)
例:function demo4():string {$success = 1;$defeated = '失败';return serialize(['success'=>$success,'defeated'=>$defeated]);}echo demo4(); // 输出 "1失败" 字符串类型echo gettype(demo4()); // 输出查看类型 string// 反序列化print_r(unserialize(demo4())['success']); // 输出 "1" 在数组中的键值为success
php函数中的参数
例:// $arg是形参function demo1(float $arg):float {return $arg *= 2;}// 参数$val = 10;echo demo1($val); // $val是实参 // 输出结果 20
例:// &:取地址符 这里的实参引用了实参的值存储地址function demo2(float &$arg):float {return $arg *= 2;}$val = 200;echo demo2($val),'<br>';// 输出这里查看$val有没有随着$arg值得变化而变化echo $val; // 输出400 值随着形参$arg的变化而发生变化
默认参数必须写在没有默认参数的后面
例:function demo3(float $a,float $b,string $c ='+') {// 定义一个变量承接结果$res = '';switch ($c) {case '+':$res = "$a + $b =".($a+$b);break;case '-':$res = "$a + $b =".($a-$b);break;case '*':$res = "$a + $b =".($a*$b);break;case '/':$res = "$a + $b =".($a/$b);break;default:$res = '非法值';break;}return $res;}// 默认echo demo3(2,3),'<br>'; // 输出5 "进入假发运算中"// 条件减号echo demo3(2,3,'-'),'<br>'; // 输出-1 "进入了减法运算中"// 条件非法echo demo3(2,3,'&'); // 输出 "非法值" 因为非法制没有这个符号
作用:剩余参数用在函数的参数列表中: 收集;所有传入函数的参数放入一个数组中
// 剩余番薯用在函数的形参(函数列表中)中例:function demo4(...$args) {return $args;}print_r(demo4(1,2,3,4,5)); // 输出数组[1,2,3,4,5]// 剩余参数用在实参中// 将剩余参数用在函数的调用表达式中, 是: 展开例:function demo5(...$args) {// array_sum();数组求和return array_sum($args);}$arr = [1,2,3,4,5,6,7];// 直接将一个数组一剩余参数的形势传入函数中进行求和运算$res = demo5(...$arr);print_r($res); // 输出 27 数组元素值的总和
回调函数.匿名函数,闭包
array_map(回调函数名/回调函数,数组);
例:$data = range(1,100);$func = function($item) {if ($item % 2 === 0) return $item;};$arr = array_map($func,$data);echo '<pre>';print_r($arr);echo '</pre>';// 或简写[就是直接把匿名函数放进去]$data = range(1,100);$arr = array_map(function($item){if ($item % 2 === 0) return $item;}, $data);print_r($arr);

// array_filter(数组,回调函数名/回调函数);该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回给结果数组。数组键名保持不变。
// 去除数组中的空值例:$data = range(1,100);$arr = array_map(function($item){if ($item % 2 === 0) return $item;}, $data);$res=array_filter($arr, function($item){return $item;});//echo '<pre>';print_r($res);echo '</pre>';

函数的命名空间
例:// 声明命名空间ns1并把函数demo1写入namespace ns1 {function demo1() {return __FUNCTION__;}}// 调用命名空阿ns1中的demo1()namespace {function demo2(){}echo ns1\demo1(); // 输出ns1\demo1}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号