84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
最近需要写点php,没有写过,只会js。php里面好像不像js一样变量是有个作用域链引用。下面代码这样的话,如何实现呢?
function A(){ $num = 0; function B(){ //这里如何引用到变量$num??? } }
查了一下说B里面global $num一下可以引用全局变量$num,但是好像$num不是全局的。。。求指点下。
人生最曼妙的风景,竟是内心的淡定与从容!
function A() { $num = 0; call_user_func(function () use ($num) { //这么用$num }); }
上面的答案只是回答你的问题, 你最好先看一遍手册, 熟悉PHP的基本语法, 不然碰到一个问题就在问答网站在问一次, 效率太低了. 千万不要用js的方式写php
转:JavaScript可以直接在匿名函数里使用外部变量。PHP匿名函数默认不能直接调用所在代码块的上下文变量,需要通过使用use关键字连接闭包(匿名函数)和外部变量。
function getMoney() { $rmb = 1; $dollar = 6; $func = function() use ( $rmb ) { echo $rmb; echo $dollar; }; $func(); } getMoney(); //输出: //1 //报错,找不到dorllar变量
可以看到,dollar没有在use关键字中声明,在这个匿名函数里也就不能获取到它,所以开发中要注意这个问题。
有人可能会想到,是否可以在匿名函数中改变上下文的变量,但我发现是不可以的:
function getMoney() { $rmb = 1; $func = function() use ( $rmb ) { echo $rmb; //把$rmb的值加1 $rmb++; }; $func(); echo $rmb; } getMoney(); //输出: //1 //1
原来use所引用的也只不过是变量的一个副本而已。
如果想要完全引用变量,而不是复制,则需要在变量前加一个 & 符号:
function getMoney() { $rmb = 1; $func = function() use ( &$rmb ) { echo $rmb; //把$rmb的值加1 $rmb++; }; $func(); echo $rmb; } getMoney(); //输出: //1 //2
如果将匿名函数返回给外界,匿名函数会保存use所引用的变量,而外界则不能得到这些变量,这样形成‘闭包’这个概念可能会更清晰一些:
function getMoneyFunc() { $rmb = 1; $func = function() use ( &$rmb ) { echo $rmb; //把$rmb的值加1 $rmb++; }; return $func; } $getMoney = getMoneyFunc(); $getMoney(); $getMoney(); $getMoney(); //输出: //1 //2 //3
上面的答案只是回答你的问题, 你最好先看一遍手册, 熟悉PHP的基本语法, 不然碰到一个问题就在问答网站在问一次, 效率太低了. 千万不要用js的方式写php
转:
JavaScript可以直接在匿名函数里使用外部变量。
PHP匿名函数默认不能直接调用所在代码块的上下文变量,需要通过使用use关键字连接闭包(匿名函数)和外部变量。
可以看到,dollar没有在use关键字中声明,在这个匿名函数里也就不能获取到它,所以开发中要注意这个问题。
有人可能会想到,是否可以在匿名函数中改变上下文的变量,但我发现是不可以的:
原来use所引用的也只不过是变量的一个副本而已。
如果想要完全引用变量,而不是复制,则需要在变量前加一个 & 符号:
如果将匿名函数返回给外界,匿名函数会保存use所引用的变量,而外界则不能得到这些变量,这样形成‘闭包’这个概念可能会更清晰一些: