gpt4 book ai didi

PHP 5.3 : How on Earth is this Variable Undefined?

转载 作者:行者123 更新时间:2023-12-02 05:44:24 25 4
gpt4 key购买 nike

我今天在玩弄一些 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')
);

?>

我不确定这段代码在逻辑上是否正确;我写的很匆忙。但即使我确实想检查它,我也做不到,因为它失败并显示以下消息:'Undefined variable: suit'。

只有一个地方使用了 $suit,那就是在 $card 函数中。鉴于 $card 函数是在以 $suit 作为参数的匿名函数中赋值的,它肯定是可以访问的,对吧?此外,它必须被定义,因为 PHP 自己的 array_map 函数是从我的定义值数组中提供参数的函数。

我将 function card($rank) { ... 转换为 $card = function($rank) { ... 认为也许前者使其成为全局性的就像 Perl 的 sub 一样,因此使内部变量不可访问。但后者也不起作用,这让我很惊讶。

谁能给我一个正确方向的提示?

最佳答案

您需要使用 use 关键字为内部闭包捕获 $suit 变量,因为该变量仅存在于外部 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'))
;
}

关于PHP 5.3 : How on Earth is this Variable Undefined?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8464905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com