PHP - 作为静态数组元素的匿名函数

标签 php class function static anonymous-function

我正在尝试为内存网站制作成就系统(“您记住了 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/

相关文章:

php - mysql: wp 数据库更新

php - 如何在 wordpress 中创建管理面板

php - Sonata sonata_type_model_list 显示对象名称

Python 装饰器? - 有人可以解释一下吗?

php - 我的类(class)无法连接到数据库?

c# - 在 C# 中处理来自父窗体的窗体?

python - 组合 __setattr__ 和 __getattr__ 会导致无限循环

java - 在 Java 中,这些方法中哪种更好?

c++ - 为什么我的成员函数不起作用?

c - atoi 是标准函数。但 itoa 不是。为什么?