Lou*_*uis 2 php variables undefined php-5.3
今天我正在玩一些PHP,做我通常做的事情,当我尝试一种我不知道或生锈的语言:写一个小蹩脚的纸牌游戏.
第一项任务是推出一个包含所有可用卡片的分类卡组.这是我的(失败)尝试:
<?php
$sorted_deck = array_map(
function($suit) {
$card = function($rank) {
return array(
'suit' => $suit
, 'rank' => $rank
);
};
return
array_map($card, range(2, 10))
+ array_map($card, array('jack', 'queen', 'king', 'ace'))
;
}
, array('clubs', 'diamonds', 'hearts', 'spades')
);
?>
Run Code Online (Sandbox Code Playgroud)
我不确定这段代码是否在逻辑上是正确的; 我匆匆写了一遍.但即使我确实想检查它,我也不能,因为它失败了以下消息:'Undefined variable:suit'.
只有一个地方使用$ suit,这就是$ card函数.鉴于$ card函数是在具有$ suit作为其参数的匿名函数内分配的,当然可以访问它,对吧?此外,必须定义它,因为PHP自己的array_map函数是从我的定义值数组中提供参数的函数.
我转换function card($rank) { ...成$card = function($rank) { ...想,也许前者使得全球像Perl的子做,从而使内部变量访问.但后者也不起作用,令我惊讶的是.
任何人都可以给我一个正确的方向吗?
Bol*_*ock 13
您需要$suit使用use内部闭包的关键字捕获变量,因为该变量仅存在于外部function($suit)闭包的范围内(作为其参数)而不是内部function($rank)闭包:
function($suit) {
$card = function($rank) use($suit) {
return array(
'suit' => $suit
, 'rank' => $rank
);
};
return
array_map($card, range(2, 10))
+ array_map($card, array('jack', 'queen', 'king', 'ace'))
;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
696 次 |
| 最近记录: |