批改状态:合格
老师批语:后面, 我们还要不断遇到这些, 是要好好学
函数是实现代码复用的重要方式,在所有编程语言中均如此
function 函数名称(类型: 参数列表): 返回值类型{// 函数体return 返回值;}
| 序号 | 名称 | 描述 |
|---|---|---|
| 1 | function |
声明函数 |
| 2 | 函数名称 |
符合 PHP 标识符命名规范,不区分大小写 |
| 2 | 参数列表 |
零个或多个接收外部传入到函数的变量 |
| 2 | {... |
创建出一个封闭的函数作用域 |
| 2 | 函数体 |
由零个可多个合法的 PHP 语句组成 |
| 2 | return 值 |
将执行结果返回函数调用者[可选] |
| 2 | ...} |
函数执行结束,如果没有return,则返回null |
| 序号 | 类型 | 语法 | 描述 |
|---|---|---|---|
| 1 | 自定义函数 | function getName(){...} |
用户根据业务需求创建 |
| 2 | 系统函数 | substr(), count()... |
也叫预定义函数,不必声明直接调用 |
| 3 | 可变函数 | $funcName(); |
函数名使用变量表示 |
| 4 | 匿名函数 | $f = function (){...} |
也叫”闭包”或”函数表达式”,常用做回调处理 |
| 序号 | 场景 | 描述 |
|---|---|---|
| 1 | return |
可以返回任何类型的值,包括函数类型 |
| 2 | 无return |
遇到}也会返回, 默认返回null |
| 序号 | 返回值类型 | 描述 |
|---|---|---|
| 1 | string |
字符串拼接 |
| 2 | array |
数组 |
| 3 | json |
JSON 字符串 |
| 4 | serialize |
序列化字符串 |
json 和序列化,使用时需要进行解码操作
参数类型
| 序号 | 类型 | 描述 |
|---|---|---|
| 1 | 值参数 | 默认传参方式 |
| 2 | 引用参数 | 改变原始调用参数值 |
| 3 | 默认参数 | 调用时允许省略的参数 |
| 4 | 剩余参数 | 调用参数数量不确定 |
<?phpecho '<h3>'.'一、作为变量赋值'.'</h3>';$getName = function($name) {return $name;};echo $getName("小明");echo "<hr>";echo '<h3>'.'二、从父作用域继承变量'.'</h3>';$sum2 = function($n1) {return function($n2) use ($n1) {$n3 = $n2 + $n1;return $n3;};};$a1 = $sum2(1)(2);$a2 = $sum2(4)(8);echo $a1;echo "<br>";echo $a2;?>

<?php/*** Created by VS Code* User: John-PC* Date: 2020/4/22* Time: 11:25* content: 缺少OO应用*/echo '<h3>'.'一、无参数回调'.'</h3>';//回调函数function callback1() {echo "这是回调函数执行的结果".'<br>';}//主函数function main($callback1) {echo "这是主函数执行的结果1".'<br>';$callback1();echo "这是主函数执行的结果2".'<br>';}//主函数中调用回调函数,可以发现主线程在执行过程中执行了回调函数,等到回调函数执行完毕之后,再回到主线程处理接下来的流程main('callback1');echo "<hr>";echo '<h3>'.'二、全局回调函数'.'</h3>';echo '<p>'."系统调用用户自定义的函数,必须要通过一个代理函数来调用,叫间接调用,也叫回调".'</p>';//定义一个回调函数并赋值给一个变量function callback2($n1, $n2) {$n3 = $n1 + $n2;echo $n3;}$f = 'callback2';//使用call_user_func()函数call_user_func($f, 1, 2);echo '<br>';//使用call_user_func_array()函数call_user_func_array($f, [3, 4]);echo "<hr>";echo '<h3>'.'三、使用匿名函数作为参数的回调函数'.'</h3>';//自定义函数function callback3($n1, $n2) {$n3 = $n1 + $n2;echo $n3;}function main1($callback) {$callback(5, 6);echo "是使用自定义函数调用回调函数后返回的结果";}$f1 = 'callback3';main1($f1);echo '<br>';//系统内置函数call_user_func($f1, 7, 8);echo "是使用系统内置函数调用回调函数后返回的结果";?>

<?php//在函数中改变了调用参数的值会改变原始调用参数的值$name = '小明';function changeName(&$a) {$a = '小红';}changeName($name);echo $name;?>

<?php//默认参数不能出现在必选参数的前面,必须写在必选参数的后面function div($n1, $n2, $n3=2) {$total = $n1 + $n2;return $total / $n3;}echo div(10, 10);?>

$name = '小明';$sex = "男";$age = 16;$phone = 13781235421;$email = "xiaoming@qq.com";function getData1() {foreach (func_get_args() as $value) {echo $value.'<br>';};}getData1($name, $sex, $age, $phone, $email);

$name = '小明';$sex = "男";$age = 16;$phone = 13781235421;$email = "xiaoming@qq.com";function getData2(...$args) {foreach ($args as $value) {echo $value.'<br>';};}getData2($name, $sex, $age, $phone, $email);

echo '<h4>'.'1. 使用占位符'.'</h4>';$data = ["小明", "男", 16, 13781235421, "xiaoming@qq.com"];$printData = function ($name, $sex, $age, $phone, $email) {echo $name.'<br>';echo $sex.'<br>';echo $age.'<br>';echo $phone.'<br>';echo $email.'<br>';};$printData(...$data);echo '<h4>'.'2. 使用list()函数'.'</h4>';$data = ["小明", "男", 16, 13781235421, "xiaoming@qq.com"];list($name1, $sex1, $age1) = $data;echo $name1.'<br>';echo $sex1.'<br>';echo $age1.'<br>';

<?phpnamespace obj1 {$name = '小明';$sex = "男";$age = 16;$phone = 13781235421;$email = "xiaoming@qq.com";function getData() {foreach (func_get_args() as $value) {echo $value.'<br>';};}getData($name, $sex, $age, $phone, $email);echo '<hr>';}namespace obj2 {$name = '小明';$sex = "男";$age = 16;$phone = 13781235421;$email = "xiaoming@qq.com";function getData(...$args) {foreach ($args as $value) {echo $value.'<br>';};}getData($name, $sex, $age, $phone, $email);}?>

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号