如何在方法中定义的匿名函数中使用“self::”访问类常量?

2022-08-30 23:21:52

我想从匿名函数中使用访问类常量。self

class My_Class {    
    const  CLASS_CONSTANT = 'test value';
    private function my_function(){     
        $lambda_function = function(){
            echo self::CLASS_CONSTANT;
        };
        $lambda_function();
    }
}

当我尝试这样做时,我得到错误:

致命错误: 无法访问 self:: 当没有类作用域处于活动状态时...

是否可以将父类传递到此匿名函数的作用域中?声明是否有效?use


答案 1

>> PHP 5.4+ 的所有版本在 3v4l <<上进行测试

PHP 5.4+ 方式:

自 PHP 5.4 以来,这已经变得非常简单,其中不再脏:$this

class My_Class {
    const CLASS_CONSTANT = 'test value';

    private function my_function() {
        $lambda_function = function() {
            // $this is actually inherited from the parent object, so
            // you don't even need a use() statement
            echo $this::CLASS_CONSTANT;

            // Or just use self, that's inherited too
            echo self::CLASS_CONSTANT;
        };
        $lambda_function();
    }
}

PRE 5.4 方式:

通过将作用域变量引入函数,使匿名函数成为闭包,并从中调用常量:

class My_Class {
    const CLASS_CONSTANT = 'test value';
    private function my_function() {
        $self = $this;
        $lambda_function = function() use ($self) { // now it's a closure
            echo $self::CLASS_CONSTANT;
        } // << you forgot a ;
        lambda_function(); // << you forgot a $
    }
}

不幸的是,你还不能。他们正在为此努力。我希望它能在 PHP >= 5.4 中工作。use ($this)


答案 2

afaik 匿名函数就是这样。功能。不是类方法,所以范围是超出的。可以将常量作为参数传递,也可以使用 My_Class::CLASS_CONSTANT。


推荐