PHP-3-函数-重要多看

1.静态变量 重点

function total(){
    static $num=0;
    $num++;
    echo $num.'<br/>';
}
total();
total();
total();
这个变量只会初始化一次,在运行的时候会记录上一次的值 ,static的变量不会销毁。



//解决内部函数重复定义的问题,定义一个标识
function haha(){
    static $bFlag=0;
    echo 'this is function of haha<br/>';
    if($bFlag==0){
        function hehe(){
        echo 'this is function of hehe<br/>';
         }
    }
    $bFlag++;
}
haha();
haha();

//解决内部函数重复定义问题2,通过判断这个函数是否调用
如果函数存在才能调用
function haha(){
    echo 'this is haha<br/>';
    if(!function_exists('test'){}
    function test(){
        echo 'this is test'
    }
}
haha();
haha();
test();
test();

//解决内部函数重复定义问题3
function haha(){
    echo 'this is haha<br/>';
    if(!is_callable('test')){
        function test(){
            echo 'this is test';
        }
    }
}

//如果函数可以调用返回真,否则返回假
//判断存在与否

内部函数重复定义的问题:
1.通过静态变量解决
2.通过判断这个函数是否存在
  function_exists()
  //传入函数名,如果函数存在返回真,如果函数不存在返回假
3.判断这个函数是否可以被调用
   is_callable();
  //如果这个函数可以调用返回真,如果不可以调用返回假
  //函数存在与否

类型约束:
function hanshu(int $num1,int $num2){
    return $num1*$num2;
}
var_dump(hanshu(1.4,3.4));
D:\wamp64\www\yemengdi\2018-8-10-yemengdi\1\each.php:50:int 3
如果你限制了你的形参的类型,就会把你传入的参数转化为相应的类型

function hanshu($num1,$num2):string{
    return $num1*$num2;
}
D:\wamp64\www\yemengdi\2018-8-10-yemengdi\1\each.php:50:D: string '3.6' (length=3)
就是限制你的返回值的数据类型,必须是字符串

function info($name,$age):int
{
    return "我的名字{$name}我的年龄{$age}";
}
info('张三','十二');
//这样写代码没有意义

严格模式:了解一下
//严格模式
declare(strict_types=1);
function sum($num1,$num2):string
{
    return 'a';
}
var_dump(sum(1,2));

function sum():int
{
    return 2;
}
var_dump(sum());
如果开启了严格模式的话,你的返回值限制了什么类型,你就必须要返回什么数据类型,不然会报错。

静态变量:static $variable=0;

解决函数重定义问题:

1.加静态变量,用flag标识

2.用function_exists()判断函数是否存在

3.用is_callable()判断函数是否调用

类型约束:

函数参数类型约束,function aha(int $num1,int $num2){}//会自动把其他类型的数据转换为整型

返回值类型约束,function aha($num1,$num2):string{}//会自动把返回值转换为字符串类型

返回值类型严格模式:

declare(strict_types=1);

function aha($num1,$num2):string{}

如果开启严格模式的话,你返回值是什么类型,传输什么类型的数据,否则会报错

call_user_func

解释:他必须依赖于一个回调函数,必须传入一个函数名,并放在括号里

call_user_func(函数名)

用法二:

call_user_func('qiu_ou',100);

function qiu_ou($total){
    $num=0;
    for($num=0;$num<=$total;$++){
        if($i%2==0){
            $num+=$i;
        }
    }
    return $num;
}

第二种用法:
call_user_func('函数名',实参1,实参2,实参3....);


引用传参:
$num1=12;
function yinyong(&$num2){
    $num2=18;
    echo $num2;
}
yinyong($num1);
echo $num1;

递归:
//先进去的后出来,后进去的先出来
function dg($n){

    if($n==1){
        echo '你是1<br/>';
        return;
    }
    dg($n-1);
    echo "你最棒{$n}<br/>";
}
dg(5);

可变参数长度:
function canshu(){
    var_dump(func_get_args()); //获取你所有的实参,并且以数组的形式返回
}
canshu(1,2,3,4,5,6,7,8,9);

func_get_arg(下标)
根据你传入的下标获取你对应的元素(值)

func_num_args()
返回你传入参数的总个数

PHP7.0的特性:
function test(...$arr){
    var_dump($arr);
}
test(1,2,3,4,5,6,7,8);
//以数组的方式接受每一个实参

function aha($num1,$num2,$num3){
    echo "$num1,$num2,$num3";
}
$arr=[1,2,3];
aha(...$arr);
//以数组的方式进行传参

变量函数:
echo calc('jia',1,3);
function calc($func,$num1,$num2){
    return $func($num1,$num2);
}
//封装加减乘除的方法:
function jia($num1,$num2){
    return $num1+$num2;
}
function jian($num1,$num2){
    return $num1-$num2;
}
function cheng($num1,$num2){
    return $num1*$num2;
}
function chu($num1,$num2){
    return $num1*$num2;
}
把一个函数名赋值给一个变量
变量名字+()==函数名+()

回调函数:
是变量函数的变形,通过变量函数和回调函数完成一些复杂的功能


匿名函数:
定义:就是没有名字的函数又叫闭包
call_user_func(function(){
    echo '你是我,我是你';
});

function (){
    echo 'mengdi';
};
加一个分号就不会报错
如果你想使用匿名函数的话必须赋值给一个变量
变量+()

猜你喜欢

转载自blog.csdn.net/qingchurenxiaoyao/article/details/81477823