PHP函数高阶

字符串变函数

可以减少if-else的多次使用
系统自带的一些函数,是没有办法使用可变函数的,
小结一下这个empty()
以下的东西被认为是空的:

“” (空字符串)
0 (作为整数的0)
0.0 (作为浮点数的0)
“0” (作为字符串的0)
NULL
FALSE
array() (一个空数组)
$var; (一个声明了,但是没有值的变量)

其实用起来还是蛮简单的,感觉跟switch一样,但是switch还要做二次赋值和引用。还不如这个可变函数来得直接,直接拿JSON解析过来的数据就可以调用函数了

function a()
{
    echo 'hi i am a', "\n";
}
function b()
{
    echo 'hi i am b', "\n";
}
function c()
{
    echo 'hi i am c', "\n";
}

function todo($what)
{
    echo $what();
}

todo('c');

跟系统抢内置的后果很严重
在这里插入图片描述

嵌套函数

外边一层的函数调用的时候,会自动声明一级的函数。
如果二次声明就会报错,需要做干预声明
在这里插入图片描述

if (!function_exists('middle'))

检测函数是否已经声明,避免二次声明而带来一个FATAERROR

在这里插入图片描述
嵌套函数传值也是超级简单。
不过没想到为甚要用嵌套函数,不知道用来干嘛
在这里插入图片描述

递归函数在这里插入代码片

函数自己调用自己,就叫做递归
这玩意还真不大会写
留着以后看吧

function test($a)
{
    $sum=1;
    if($a==1){
        return 1;
        //这里的1是返回到小循环的
        // $SUM=3*2*1就是这个1了
    }else
    {
        $sum=$a*test($a-1);
    }
    return $sum;


}
echo test(10);

匿名函数(闭包)

这个比较简单了,
就是说用一个变量,后边跟一个没有名字的函数

<?php
$m=1;
//这里用global
$a=function( ) 
//感觉这个USE还是蛮鸡肋的,因为跟global的作用差不多,需要引用的变量需要在外部定义过
{   
    global $m;
    echo $m;
}; 
$a('123');

//这里用use
$a=function( ) use($m)
//感觉这个USE还是蛮鸡肋的,因为跟global的作用差不多,需要引用的变量需要在外部定义过
{   

    echo $m;
}; 
$a('123');

//这个是错的
function aa() use($m)
{
    echo $m;


}

这个闭包还有一个比较坑的地方,就是说,他的use附作用域,只能是在USE之前定义好,
不然的,也就是说在后边需要编程值(这个不是经常变更吗!)需用用到引用传递,加&。
不然值还是USE之前的值。感觉还不如一个global来得直接

在这里插入图片描述
B就是这么坑,还是123,
在这里插入图片描述
然后呢,更加坑的是,如果你习惯用引用传递之后呢,
在函数内部用引用传递,这个值是不会变更的,所以还是把这个鸡肋的USE丢掉算了
不懂以后会不会顿悟这个USE的功能嗯额?
在这里插入图片描述
看看这个回调函数,回调参数部分。
用强类型 Closure做匿名函数强制声明

<?php

function sayhello($name,Closure $b)
{
    echo "hello ",$name,"\n";

}
$b=function(){echo 'i am here;';};

sayhello('lily',function(){echo "hello ";});

这个回调函数失败了,那是因为在主函数里边需要执行一遍回调函数,把回调函数调起,
感觉跟传参,传一个函数进来一个道理
在这里插入图片描述

代码引用,复用

1. include(包含不进来不管你,能用的还是在用)
2. include_once
3. require(引用不进来就直接致命错误,脚本停止)
4. require_once

2次引用就会报错。所有有一个once
在这里插入图片描述在这里插入图片描述

这里还看得到123
123找不到了

——DIR—— :当前内容写在哪个文件就显示这个文件目录

——FILE—— : 当前内容写在哪个文件就显示这个文件目录+文件名

require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit25532323131316480d364f3ab3bd::getLoader();

引用这个有一个设置引用路径的,不过感觉不是很经常引用,或者或直接用composer引用了,就不理他了。
2019年12月19日21:10:03

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值