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';
};
加一个分号就不会报错
如果你想使用匿名函数的话必须赋值给一个变量
变量+()