批改状态:合格
老师批语:
/*** 函数:完成特定功能的代码块~函数:属于全局成员 全局可访问** function 函数名称([ 参数类型限定 参数列表]) :返回值类型限定* {* #函数体* return 返回值;* 1. 函数只能返回单个值,返回值的数据类型可以是任意类型* 2. 函数碰到return语句,立即结束程序执行,return后面的代码不会被执行*}*/

//自定义函数function setSum(float $a , int $b) :int{return $a + $b;}echo setSum(10,20);

大家可以看到函数体内有多个return 返回了多个数据,但是return返回值只能返回一个值,而且在函数体内只要输出了return函数脚本则不会继续执行下去,系统也是按照从上到下解析的,所以最后的出的结果是100/200=5
//return返回值function setSum(float $a , int $b) :int{return $a / $b;return $a * $b;return $a + $b;}echo setSum(100,20).'<hr>';

在函数里面return 数组也是没有问题的,可以返回多个值,如果要获取数组里面的内容则要用数组key也就是键值去获取,如果不知道这是什么东西可以用print_r来打印数组
//数组返回function setArr():array{return ['张帅',"echo666",'857857'];}$arr = setArr();print_r($arr);

在访问对象里面的nam值的时候可以用->来进行访问

//对象返回function setOBJ() :object{return new class(){public $name = 'admin';public $email = '1234@qq.com';};}// $obj = setOBJ();// echo $obj->name;var_dump(setOBJ());echo '<hr>';

中文不转为unicode-> json_encode JSON_UNESCAPED_UNICODE 256
图片不转为unicode->JSON_UNESCAPED_SLASHES 64 图片转义和文字转义相加等于320

json_decode 能将json格式还原成php能够处理的数据类型
传入第二个参数true 可以转为原始数组
//转为json格式字符串返回function setJson() :string{//json_encode JSON_UNESCAPED_UNICODE 256 中文不转为unicode//JSON_UNESCAPED_SLASHES 64 图片转义和文字转义相加等于320return json_encode(['id'=>1 ,'mag'=> '验证成功'],320);}$json_arr = setJson();echo $json_arr .'<hr>';//json_decode 能将json格式还原成php能够处理的数据类型//传入第二个参数true 可以转为原始数组$res = json_decode($json_arr,true);var_dump($res);

serialize 序列化字符返回 ,如果要解析里面的内容则要转换为php能解析的数字类型,用unserialize转换

unserialize 转换为数组类型
//序列化字符返回function setLize(){//serialize 序列化字符return serialize(['id' => 1 ,'name' => 'admin@qq.com' ,'password' => '132456']);}var_dump(setLize());echo '<hr>';//unserialize转换成php能解析的类型print_r(unserialize(setLize()));
函数参数的作用:
2.有参数,可以根据用户传递过来的数据决定函数内的程序该如何执行,函数的参数列表是给用户调用函数的时候,提供的接口

//自定义表格属性function taBle(){$table = '<table border = "1" cellspacing = "0" >';//for循环 循环表格列和行for ($i=0; $i < 3; $i++) {//外层循环控制表格的行$table .="<tr>";for ($j=0; $j < 3 ; $j++) {//内层循环控制表格的列$table .="<td><input type='button' value='按钮' /></td>";}//外层循环控制表格的行$table .="</tr>";}echo $table;}

在函数里面声明遍历行参,写好函数内部代码后,让用户填写函数的实参就能形成用户想要的表格样式
//让函数内部的参数不固定,让用户传递参数遍历表格//函数行参有,$row 行 , $cols 列 ,$background 背景色,$content 文字内容function taBle2(int $row , int $cols ,string $background = 'blue' ,string $content = "心"){$table = "<table border = '1' cellspacing = '0' bgColor='$background' >";for ($i=0; $i < $row ; $i++) {//外层循环表格的行$table .="<tr>";//内层循环表格的列for ($j=0; $j < $cols ; $j++) {$table .="<td>$content</td>";}$table .="</tr>";}$table.="</table>";return $table;}echo taBle2(5,3,"lightblue","张帅");

此时变量名称就是这个匿名函数,我们就可以给它传递参数

在php中匿名函数,就是闭包,闭包会引发php作用域问题,php局部作用域访问全局作用域中的变量用:
global和 超全局数组$GLOBALS,闭包可以通过use访问函数外部的自由变量/父作用域中的变量

闭包可以改变上下文中的值,但是需要用的引用传递&

在工作中闭包常用作函数的返回值,返回一个闭包匿名函数,访问外部匿名函数行参$content,第一次传参是给父节点函数,第二次传参是给子节点匿名函数

当然也可以一起传参:echo demo3(“php中文网”)(“red”);
<?php/*** 函数:属于全局成员 全局可访问* 匿名函数 Anonymous functions 闭包 closures* 允许 临时创建一个没有指定名称的函数*///匿名函数,没有函数名称的函数$setName = function ($name){echo $name;};//此时变量名称就是这个匿名函数,可以给他传递参数$setName("张帅");echo "<hr>";//在php中匿名函数,就是闭包,闭包会引发php作用域问题//php局部作用域访问全局作用域中的变量用:global 和 超全局数组$GLOBALS$name = "张起灵";$email = "13456@qq.com";//闭包可以通过use访问函数外部的自由变量/父作用域中的变量$demo = function() use ($name,$email){return sprintf('name = %s <br> email = %s <br>',$name , $email);};echo $demo() . "<hr>";//闭包可以改变上下文中的值,但是需要用的引用传递&$name1 = "我是自由/全局变量";echo $name1 ."<br>";$demo2 = function ($content) use (&$name1){return $name1 = $content;} ;$demo2("我可以改变自由/全局变量");echo $name1 ."<hr>";//在工作中闭包常用作函数的返回值function demo3 ($content){//返回一个闭包匿名函数,访问外部匿名函数行参$contentreturn function ($color) use ($content){return sprintf("<h3 style='color:%s'>%s</h3>",$color,$content);};};//第一次传参是给,父亲节点函数$demo4 = demo3('php中文网');//第二次传参是给,子节点匿名函数echo $demo4('green');//一起传参echo demo3("php中文网")("red");
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号