您的位置:

php函数名参数和闭包(php函数默认参数)

本文目录一览:

php 匿名函数,也叫闭包函数?

应该说不对,在 php 中 使用了 use 语句的匿名函数才是闭包函数。php 的变量默认是局部的,没有 use 语句,匿名函数使用不了定义作用域里的变量。只有使用了定义作用域内变量的才能叫闭包函数。

PHP回调函数及匿名函数概念与用法详解

PHP的回调函数其实和C,Java等语言的回调函数的作用是一模一样的,都是在主线程执行的过程中,突然跳去执行设置的回调函数;

回调函数执行完毕之后,再回到主线程处理接下来的流程;

而在PHP调用回调函数,不像C以及Java那样直接使用函数名作为函数参数,而是在PHP中使用函数对应的字符串名称执行。

// call_user_func — 把第一个参数作为回调函数调用

// 第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。

// PHP中的匿名函数,也叫闭包函数,允许指定一个没有名称的函数。最常用的就是回调函数的参数值。

//检测一个函数变量是否是一个闭包

// 传入参数,引用局部变量

php方法中如何获取闭包的值?

亲,你好,很高兴为你解答该问题

首先,你的这个写法是有问题的哦!~

class A {                          

    public function aa() {         

         // 函数体为空,所以外面不会有任何输出,即使设置变量来接受该方法,也不会有任何返回

         // 所以你肯定拿不到123                                                                                  

    }                              

}                                  

$a = new A;                        

$a-aa(function () {  // aa方法是不接受任何参数的,这个传了闭包进去

    return 123;                    

});

要想拿到闭包中的123,你需要这样写才可以呦~~

class A {                          

    public function aa($closure) {  // aa方法接受一个闭包函数进来

        return $closure(123);       // 调用闭包函数,传入相应参数,并将闭包返回的值再次返回出去

    }                              

}                                  

                                   

$a = new A;                        

$b = $a-aa(function ($param) {   // 给aa传入一个带一个参数的闭包

    return $param;                       // 闭包方法返回传入的参数

});                                

var_dump($b);

希望可以帮到你,给我个采纳呦!~~

PHP闭包函数传参及使用外部变量的方法

本文实例讲述了PHP闭包函数传参及使用外部变量的方法。分享给大家供大家参考,具体如下:

在Laravel控制器写两个方法,一个是在内部创建一个闭包函数,一个是执行传过来的闭包函数,测试闭包的写法,use使用外部变量,及闭包函数的传参。如下:

//测试闭包传参及use使用外部变量

public

function

testClosure($t1,

$t2)

{

$closure

=

function

($param1,

$param2)

use

($t1,

$t2)

{

echo

$param1.$param2.$t1.$t2;

};

$this-execClosure('test.closure',

$closure);

}

//执行闭包函数

protected

function

execClosure($name,

Closure

$closure)

{

echo

'Closure

func

name:'.$name;

echo

'br';

$closure('p1',

'p2');

}

在routes.php添加路由:

复制代码

代码如下:Route::get('/test/closure/{t1}/{t2}',['uses'='TestController@testClosure']);

访问

浏览器输出结果:

Closure

func

name:test.closure

p1p2hehe1hehe2

转自:小谈博客

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

js闭包和PHP闭包的区别

1 什么是闭包

php:你跟我聊闭包之前啊,首先来聊聊 匿名函数(Anonymous function)下面就是一个匿名函数的栗子,匿名函数 顾名思义就是没有名字啊。。

(PHP在引入闭包之前,也有一个可以创建匿名函数的函数:create function,但是代码逻辑只能写成字符串,这样看起来很晦涩并且不好维护,所以很少有人用。)本人没有验证~~

$func = function(){

}; //带结束符(一定要带)

实现闭包

将匿名函数在普通函数中当做参数传入,也可以被返回。这就实现了一个简单的闭包。

(闭包可以保存所在代码块上下文的一些变量和值。PHP在默认情况下,匿名函数不能调用所在代码块的上下文变量,而需要通过使用use关键字。所以下面的一段函数会报错 undefined variable a )

function add($a)

{ $a = $a; $fun1 = function ($b=2)

{ echo $a+$b; };

return $fun1; }

$fun1 = add(21);

$fun1(6);

如果想使用 $a 怎么办。php 是见招拆招啊。 关键字 use:

function add($a)

{ $a = $a; $fun1 = function ($b=2) use ($a) //只需要一个use($a)

{ echo $a+$b; };

return $fun1; }

$fun1 = add(21);

$fun1(6); //27

那么能否在匿名函数中改变上下文的 变量呢 来做个试验吧

function add($a) { // $a = $a; $fun1 = function ($b=2) use ($a) { echo $a; $a++; }; $fun1(); echo $a; }

$fun1 = add(21);

//2121 哦 很遗憾 传值是不行的

那来试试 传引用吧

function add($a) { // $a = $a; $fun1 = function ($b=2) use ($a) { echo $a; $a++; }; $fun1(); echo $a; }

$fun1(6); //2122 哦 可以的

使用use 关键字匿名函数就可以引用上下文的变量了。如果将匿名函数返回给外界,匿名函数会保存use所引用的变量,而外界则不能得到这些变量,这样形成‘闭包’这个概念可能会更清晰一些。(也就是说 use 所引用的变量 会一直保存在内存中,直到显示销毁 这是闭包的一大特点)

javascript:你们php弱爆了。我们js可以直接调用 函数外部的变量。来唠唠js的闭包吧。

先来聊聊 js的变量作用域吧。1 全局变量,2局部变量(var vname)

阮一峰前辈说:js的闭包可以简单的理解为,能够获取函数外部的变量的函数,就叫闭包。

一是读取函数内部的变量,

二是让这些变量的值保存在内存中,实现数据共享

闭包就是能够读取其他函数内部变量的函数。

由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

注意:::在javascript里,在函数里声明的函数都是局部的,函数运行完后就释放了

ECMAScript 描述:

函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响。

PHP的几种函数参数类型及一些特殊函数

给你整理如下:

默认参数:在函数声明时给参数赋值,而且此默认参数只能在最后,调用时可不传递任何参数(若只有默认参数的情况下)

可变参数:一个函数可能需要可个可变数目的参数。在php中,提供了三个函数用于检索函数中所传递的参数。func_get_args()返回一个提供提供给函数的所有参数的数组;func_num_args()返回提供给函数的参数数目;func_get_arg()返回一个来自参数的特定参数。具体如下:

$array = func_get_args();

$count = func_num_args();

$value = func_get_arg();

遗漏参数:当调用函数时,可以传递任意个参数给函数。当函数必要的参数没有i被传递时,此参数值是空,并且PHP会为每个遗漏的参数发出警告

可变函数:使用可变变量,可以基于变量的值调用函数

匿名函数:又叫闭包函数,允许临时建立一个没有指定名称的函数,最经常用作回调函数参数的值。需要注意的是,在匿名函数内的变量的用法不同于全局变量,在匿名函数内的变量是一个闭包变量,另外,被调用闭包的作用域不必是相同的。