我今天正忙着用一些PHP,當我嘗試一種我不認識或生鏽的語言時,通常會這樣做:編寫一個小小的蹩腳紙牌遊戲。PHP 5.3:這個變量未定義在地球上嗎?
第一項任務是推出一個有所有可用卡的分類卡組。這是我的失敗嘗試:
<?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')
);
?>
我不確定這段代碼是否在邏輯上是正確的;我急於寫下它。但即使我確實想檢查它,我也不能,因爲它會失敗並顯示以下消息:'未定義的變量:套裝'。
只有一個地方使用了$ suit,而這在$ card函數中。鑑於$ card函數被分配在以$ suit爲參數的匿名函數中,當然它是可訪問的,對吧?此外,必須定義它,因爲PHP自己的array_map函數是從我的定義值數組中提供參數的函數。
我將function card($rank) { ...
轉換爲$card = function($rank) { ...
,認爲前者可以像Perl的sub一樣使其全局化,從而使內部變量無法訪問。但是後者也不起作用,令我感到意外。
任何人都可以給我一個正確的方向推動嗎?
謝謝,那就是我一直在尋找的東西。顯式捕獲...有趣。 C++ 11也有這個功能,但至少它有'全部捕獲'和'全部引用'選項。 PHP有什麼等價的東西嗎? – Louis
@Louis:不是我所知... – BoltClock
出於興趣,是否有什麼特別的原因,爲什麼PHP無法自動捕捉變量對我來說? – Louis