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


How can I access class constants using `self::` inside an anonymous function defined in a method?

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

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

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

致命错误:无法访问self::当没有类作用域在…

是否可以将父类传递到这个匿名函数的作用域?use语句能行吗?

>所有版本的PHP 5.4+方式在3v4l <<

PHP 5.4+ WAY:

从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 WAY:

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

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 $
    }
}

不幸的是,你还不能use ($this)。他们正在努力。>= 5.4.

匿名函数就是……功能。不是类方法,所以作用域不在。您可以将该常量作为参数传递,也可以使用My_Class::CLASS_CONSTANT。

在匿名函数中访问self,这是行不通的。你应该做的是使用My_Class::CLASS_CONSTANT而不是self引用

不,那不可能。同样,您也不能将$this绑定到匿名函数。只是传递必要的值,而不是应该做的伎俩?

<?php
class My_Class {
    const  CLASS_CONSTANT = 'test value';
    private function my_function(){     
        $lambda = function( $yourConstant ){
            return $yourConstant;
        };
        return $lambda( self::CLASS_CONSTANT );
    }
    public function test( ) {
        return $this->my_function( );
    }
}
$class = new My_Class( );
echo $class->test( ); // 'test value'