字符串变函数
可以减少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
——DIR—— :当前内容写在哪个文件就显示这个文件目录
——FILE—— : 当前内容写在哪个文件就显示这个文件目录+文件名
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit25532323131316480d364f3ab3bd::getLoader();
引用这个有一个设置引用路径的,不过感觉不是很经常引用,或者或直接用composer引用了,就不理他了。
2019年12月19日21:10:03