函数知识细说
函数主体
返回值
函数的返回值 1.函数没有返回值,返回 null 2.函数只能返回单一的值,返回值的数据类型可以是任意类型 3.函数碰到 return 语句,立即结束程序执行,return 后面的代码不会被执行
函数没有参数,执行的任务是固定的~ 有参数,可以根据用户传递过来的数据决定函数内的程序该如何执行,函数的参数列表是给用户调用函数的时候,提供的接口函数的参数
函数的参数是实现代码快捷操作,避免代码写死,使代码更加灵活的工具。
图示:
函数的参数具有以下几个特点:
- 传入参数会覆盖默认参数的值。
- 不传参数或者少传参数,都会使用默认的参数的值
- 参数列表是从左向右开始求值的。
- 函数调用时,必选参数一定要传值
通过如何通过传入参数的值来实现自定义表格行列数量和背景颜色以及默认填充内容:
function createTable2(int $rows,int $cols,string $bgColor='green',string $content='M')
{
$table = "<table bgColor='{$bgColor}' border='1' cellspacing='0'>";
//外层循环控制表格的行
for($i=1;$i<=$rows;$i++)
{
$table .= "<tr>";
for ($k=1;$k<=$cols;$k++ )
{
$table .= "<td>{$content}</td>";
}
$table .= "</tr>";
}
$table .= "</table>";
return $table;
}
echo creatTable2(4,4,lightblue,GGG);
PS:函数参数中的重点=>
- 引用参数。
引用参数:实际上是通过将一个变量的值通过引用赋值的方式赋值给一个参数传入,当变量的值发生改变时,引用赋值的参数的值也会发生改变。根据引用赋值的特点可以知道,实际上当一个变量通过引用赋值的方式将自己的值传给一个参数的时候,此时,这个参数也相当于一个变量,此时,这两个变量的值会关联在一起,当外部变量的值发生改变时,会直接影响父程序的运行结果。
下面我通过一个代码来解读:
function ref(&$num)
{
return $num *= 2;
}
$total = 20;
echo ref($total);
echo $total; //把$total的内存储存区块相对地址 导入到函数中了,在函数里发生的任何变化,都会对父程序造成影响
- 剩余参数
剩余参数是指:当调用的参数数量不固定时,可能会出现多余的参数,但是此时还需要一并调用,就需要用到剩余参数。
语法:text(...rest)
演示:
//剩余参数用在参数列表中 :收集
function test(...$args) //语法:...rest 将所有参数收集利用
{
return array_sum($args); //array_sum 函数是PHP的内置函数:求和
}
echo test(12,12,3,4,5,898,1);
echo '<hr>';
//剩余参数用在 函数的调用表达式中:展开
$arr = [1,2,3,4,5,6,7,8,585];
$res = test(...$arr);
echo $res;
- 回调函数
回调函数也叫匿名函数,闭包,它的作用是将一个函数当做参数传递给父函数
用于异步编程中函数的参数,异步编程->对函数执行的时间和顺序不可预测,通过事件/回调的方式来唤醒主程序~
$data = range(1,100);
$arr = array_map(function($item){//临时变量,总是变化的, 为什么这里的函数的参数是可以写
// 为item,因为function(item){}是一个整体作为一个函数的参数,而这个参数的来源是第二个参数$data里面的值
if($item % 2 == 0) return $item;
},$data);
- 函数的命名空间
函数的命名空间类似于常量的命名空间
//函数的命名空间
namespace ns1
{
function demo()
{
return __FUNCTION__;
}
}
//全局空间
namespace{
function demo(){};
echo ns1\demo();
}
内置函数 array_xxx()的用法
array_map()
array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。
PS:回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
array_map() 重点在于遍历一个数组或多个数组的元素,返回一个新的数组
语法:
array_map("函数名",数组1,数组2,数组3......)
语法:array_map(myfunction,array1,array2,array3...)
参数 | 描述 |
---|---|
myfunction |
必需。用户自定义函数的名称,或者是 null。 |
array1 |
必需。规定数组。 |
array2 |
可选。规定数组。 |
array3 |
可选。规定数组。 |
实例:将函数中的每个值都乘以它本省,返回数组:
function demo($v){
return $v*$v;
}
$arr = array(1,2,3,4,5);
print_r(array_map("demo",$arr));
将函数名赋值给null
时,此时类似于遍历,返回的值为,数组之中嵌套数组将数组成员展示出来。
$a1=array("Dog","Cat");
$a2=array("Puppy","Kitten");
print_r(array_map(null,$a1,$a2));
- array_filter()
该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。
array_filter()
重点在于过滤(而不是新增)某个元素,当你处理到一个元素时,返回过滤后的数组
只有当传入的值为 true 后,函数才会将这个结果返回到结果数组中,并且键值保持不变,键值在原数组之中为多少,最后在新数组之中就会返回多少的键值
语法array array_filter (数组,回调函数,flag)
语法array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
参数 | 描述 |
---|---|
array |
必需。规定要过滤的数组。 |
callback |
可选。规定要用的回调函数。 |
flag |
可选。决定 callback 接收的参数形式: |
calback 接收的参数形式:
参数 | 描述 |
---|---|
ARRAY_FILTER_USE_KEY |
接受键名作为的唯一参数 |
ARRAY_FILTER_USE_BOTH |
同时接受键名和键值 |
$arr = ['a','b',1,2,3];
$new_arr = array_filter($arr,function($val){
return is_numeric($val); //返回所有的整型数字
});
var_dump($new_arr);
//返回结果
//array (size=3)
// 2 => int 1 在原数组之中的键值为2
// 3 => int 2 在原数组之中的键值为3
// 4 => int 3 在原数组之中的键值为4
- array_values()
如果说
array_filter()
会返回所有符合条件为true
的值,并放置在结果数组之中组成一个新的数组,并且保持原有的键值,那么array_values()
将会对这些编号已经乱了的数组进行重新编号,并且从 0-1 开始递增。
定义:array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名。
PS:被返回的数组将使用数值键,从 0 开始并以 1 递增。
语法:array_values(arr[必选])
$arr = ['a','b',1,2,3];
$new_arr = array_filter($arr,function($val){
return is_numeric($val); //返回所有的整型数字
},ARRAY_FILTER_USE_BOTH);
var_dump($new_arr);
echo "<br>".'重新编号后'."<br>";
print_r(array_values($new_arr));