我正在尝试为内存网站制作成就系统(“您记住了 50 张卡片”等),我尝试使用的方法是一组匿名函数:
class AchievementController extends Controller
{
private static $rules = array(
'card'=>array(
1=>function() {
//do check for achievement
},
2=>function() {
//do check for achievement
}
),
'set'=>array(
5=>function() {
//do check for achievement
},
6=>function() {
//do check for achievement
},
)
);
//...
}
想法是在特定时间检查特定类型的成就规则,即当您学习一张新卡时,将检查 card
子集。我曾希望像这样使用 foreach
循环:
foreach(self::$rules[$type] as $rule)
{
$rule();
}
但是,当我尝试声明 $rules
数组时,出现此错误:
PHP 解析错误:语法错误,意外的“函数”(T_FUNCTION)
/.../controllers/achievement.php 第 24 行
如果我在函数(非静态)中声明 $rules
,它就可以正常工作。我不能把它放在构造函数中,因为这个类是静态使用的,所以不会调用构造函数。
我的问题是,我可以在静态数组中执行此操作吗?还是我应该做点别的?
(追问:还有比这更好的做成就的方法吗?)
最佳答案
您无法在类中预先声明它们(匿名函数)。不过,您可以在类方法中执行此操作:
class AchievementController extends Controller {
public static $rules = array() ;
public static function setup(){
self::$rules = array(
0 => function(){
echo "One-statement array" ;
}) ;
//OR
self::$rules[0] = function(){
//Echo "ASD" ;
} ;
self::$rules[1] = function(){
//Echo "ASD2" ;
}
}
}
AchievementController::setup() ; //Just calling pseudo-constructor for static class
关于PHP - 作为静态数组元素的匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17436188/