PHP 函数
代码如下:
<?php
//-----函数的定义--------
//无参无返回值的函数
function myfun(){
echo "我是函数";
}
//有参数的函数
function myfun2($num){
echo "参数=$num";
}
//有参数有返回值的函数
function myfun3($num , $num2){
return $num + $num2;
}
//-----函数的调用-------
//有参数的函数
function myfun4($num){
echo "参数=$num";
}
//有参数有返回值的函数
//有参数有返回值的函数
function myfun5($num , $num2){
return $num + $num2;
}
myfun4(1);//调用函数并传参
myfun5(6,10);//调用函数并传参,参数无类型,实参可以是任意类型的常量或变量
//-----函数传参-------
//1.默认形参 必须从右往左一次设置
function sum($n1,$n2,$n3=0,$n4=0,$n5=0){
return $n1 + $n2 + $n3 + $n4 +$n5;
}
//调用函数的时候 如果调用给出了实参,不会使用默认参
echo sum(1,2,3,4,5); //输出15
echo "<br/>";
//如果调用函数没有给出实参,就是用默认参数
echo sum(1,2,3);//输出6
//2.引用类型传参
//默认情况下,修改形参不能作用到实参上面去,形参和实参是两个独立的内存单元(不包含数组)
//现在想要实现,在形参名前加&符号即可
function swap($l,$r){
$t = $l;
$l = $r;
$r = $t;
}
echo "<br/>";
//& 符号的作用是表示该形参是一个引用类型的形参
function swap1(&$l,&$r){
$t = $l;
$l = $r;
$r = $t;
}
$a = 100;$b = 200;
//调用第一个函数swap
swap($a,$b);
echo "a=$a,b=$b";//输出a=100,b=200
echo "<br/>";
//调用第二个函数swap1
//传参的时候不需要任何改变
swap1($a,$b);
echo "a=$a,b=$b";//输出a=100,b=200
echo "<br/>";
//3.可变长参数
//类似于printf可以接受无限个参数 定义一个参数,在参数名前加上 ...
//函数调用的时候,PHP会将这个函数的实参列表打包成一个数组,然后传递给函数
function myfun6(...$a){
print_r($a);//当成数组可以直接打印 打印出所有参数
}
//调用函数试一试
myfun6(1,2,3);//输出数组
echo "<br/>";
//可以传递不同个数以及不同类型的参数
myfun6(6,'hello',"hahaha","36.8");
echo "<br/>";
//-----闭包-----
//1.匿名函数
//PHP中可调用对象本质是变量,能够保存函数的地址 也可以将变量作为函数调用
function myfun7(){
echo "这是有名字的函数,名字叫:".__FUNCTION__;
}
$funobj = function (){
echo "这是一个没有名字的函数,也称作匿名函数,名字叫:".__FUNCTION__;
};
//调用
myfun7();
echo "<br/>";
$funobj();
echo "{closure}翻译过来就是闭包";
echo "<br/>";
//在函数内部定义函数
function myfun8($num){
$funobj = function ($n) use ($num){//use关键字是用于说明匿名函数使用了外部的变量
return $n * $num;
};
return $funobj;
}
$funobj = myfun8(5);
$funobj1 = myfun8(6);
echo $funobj(2);//输出10
echo "<br/>";
echo $funobj1(2);//输出12
echo "<br/>";
//局部变量、全局变量、超全局变量
$g_num = 0;//在函数的外部定义,是全局变量
function myfun9(){
$num = 0;//局部变量 离开函数无法使用
$g_num = 10;//函数内部使用全局变量
echo $g_num;//全局变量与局部变量重名默认使用局部变量
}
echo "num = $num\n";//函数的外部不能使用局部变量
echo "<br/>";
myfun9();//默认使用局部变量
echo "<br/>";
//超全局变量
$name = '如花';
echo $GLOBALS['name'];//输出的是如花,取键值就是取$name变量的值
echo "<br/>";
$GLOBALS['name'] = '翠花';//修改了全局变量
echo $name;//输出翠花
echo "<br/>";
print_r($GLOBALS);//打印数组查看所有全局变量


浙公网安备 33010602011771号