php基础(17)_static静态关键字、可变函数、匿名函数简单介绍

静态变量:在函数内部定义时变量使用static关键字+变量名修饰,用来实现跨函数共享数据的变量

基本语法:
function 函数名()
{   
    static $变量名 = 值    //通常在定义的时候就直接赋值
}

静态变量的作用是为了跨函数共享数据(同一个函数被多次调用)

静态变量的原理:系统在进行编译的时候就会对static这一行进行初始化:为静态变量赋值
函数在调用的时候,会自动跳过static关键字这一行

静态变量的使用:
1、为了统计:当前函数被调用的次数
2、为了统筹函数多次调用得到的不同结果(递归思想)

静态变量示例:

<?PHP
function num()
    {   
	static $a = 0;
	$a++;
	$b = 0;
	$b++;
	echo "a=".$a."b="."$b"."\n";
    }
num();         //编译结果:a=1b=1
num();         //        a=2b=1         
num();         //        a=3b=1
?>

static变量和普通变量的区别:
static全局变量与普通全局变量区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。

static 变量的好处:不会被其他文件所访问,修改其他文件中可以使用相同名字的变量,不会发生冲突。

可变函数
PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。 

基本语法:
$ 变量名 = "display";
function display(参数)
    {
         函数体;
    }
    $变量(参数);     //可变函数

可变函数在系统使用的过程中还是比较多的,尤其是使用很多系统函数的时候:需要用户在外部定义一个自定义函数,但是是需要传入到系统函数内部使用

简单递归思想函数调用示例:

<?PHP
function recursive($n)          //编译结果:6  
    {
         $func = __FUNCTION__; //获取当前函数的名称
         if($n>=1)
         {
              return $n + $func($n-1); //以后如果修改了函数名,我们就不需要修改函数的方法体了
         }
    }
echo recursive(3);         //可变函数
?>                   

注意:可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。例如 $a = 'unset'; $a = 'empty'; 

匿名函数
匿名函数(Anonymous functions),也叫闭包函数(closures),允许指定一个没有名称的函数,把匿名函数赋值给变量,通过变量来调用。最经常用作回调函数(callback)参数的值。匿名函数目前是通过 Closure 类来实现的。

基本语法:
变量名 = function()
    {
         函数体;
    };

闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号:
变量保存匿名函数,本质得到的是一个对象(closure)

匿名函数调用示例:

<?php
$greet = function($name)
    {
         echo "Hello $name"."\n";
    };
$greet('World');    //编译结果:Hello World
$greet('PHP');      //        Hello PHP
?>

闭包

闭包:closure,一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)

简单理解:函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)

简单闭包示例:

<?php
function closureFunc()
    {
	 $Func = function()
	      {
		  echo "张三";
	      };
         $Func();    //普通函数内部调用了匿名函数
    }
closureFunc();//输出: 张三
?>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值