常规参数的函数
- 常规参数的函数格式说明:
string example(string name,int age,double height)
- 所谓的常规参数的函数,就是实参和形参应该个数相等、类型一致。就像 C 或 Java 等强类型型语言。
- 上面函数有三个参数,调用时传递的参数个数和顺序必须一致。
- 比如:
-
string chr(int $ascii)
,返回指定的字符
-
float ceil(float $value)
,进一法取整
-
array array_combine(array $keys,array $values)
,合并一个数组
string implode(string $glue,array $pieces)
伪类型参数的函数
- 常规参数的函数格式说明:
mixed funName(mixed $a, number $b, callback $c)
- PHP是弱类型语言,不仅在声明变量时不需要指定类型,当然在声明函数时也不需要指定类型,所以在PHP中函数的每个参数,都可以为其传递任意类型的值。
- 三种伪类型:
mixed
、number
和 callback
。
- 比如:
-
bool empty(mixed $var)
,检查一个变量是否为空
-
bool usort(array &$array,callback $cmp_function)
,自定义函数对数组排序
-
number abs(mixed $number)
,绝对值
引用参数的函数
- 引用参数的函数格式说明:
void funName(array &args)
- "&"修饰的参数是引用参数,会得到变量的地址,实际上就是把参数的地址传进来。如果在函数内部修改了参数,外部所对应的变量数据一样会被修改。
- 相对于按值传递模式,并不会将父程序中的指定数值或目标变量传递给函数,而是把该数值或变量的内存储存区块相对地址导入函数之中。因此当该数值在函数中有任何变动时,会连带对父程序造成影响。
- 注意:如果在函数的形参中使用“&“修饰的参数,在调用该函数时必须传入一个变量给这个参数,而是不能传递一个值。
<?php
// &$num 是一个内存的存储地址
function demo(&$num){
return $num++; // 先取值,后自加
}
// demo(10) // 报错,只能传递一个变量,不能传递具体值
//
$i = 10;
echo demo($i); // 10
echo "<hr />";
echo $i; // 11
默认参数的函数
- 默认参数(“[]”中的)的函数格式说明:
mixed funName(string name [,string value [,int num]])
- 在 PHP 中,支持函数的默认方式调用。如果在调用函数时没有指定参数的值,在函数中会使用参数的默认值
- 注意:默认参数必须列在所有没有默认值参数的后面。
回调函数
- 回调函数格式说明:
mixed funName(callback arg)
- 所谓回调函数,就是指调用函数时并不是传递一个标准的变量作为参数,而是将另一函数作为参数传递到调用的函数中。
# 变量函数
<?php
// 通过可变变量调用函数,也相当于一种回调
// 函数名是可以放在变量里的,通过变量名调用
function one($i){
if($i % 3 == 0) return true;
return false;
}
function two($i){
if($i % 4 == 0) return true;
return false;
}
$result = "one";
var_dump($result(10)); //false;
var_dump($result(9)); //true;
<?php
# 使用变量函数声明和应用的回调函数
function one($num){
if($num % 3 == 0) return true;
return false;
}
//过滤回文数(11,22,33)
function two($num){
if($num == strrev($num)) return true;
return false;
}
function filter($fun){
for($i = 0; $i < 100; $i++){
if($fun($i)) continue;
echo $i;
echo "<br />";
}
}
filter("one");
filter("two");
<?php
# 借助`call_user_func_array()`函数自定义回调函数
function demo($msg1, $msg2){
echo $msg1;
echo "<hr />";
echo $msg2;
}
// 比较少用
call_user_func_array("demo", ["信息1", "信息2"]);