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);//打印数组查看所有全局变量

111111

posted @ 2019-12-31 16:45  Lay0us  阅读(50)  评论(0)    收藏  举报