我想在匿名函数中使用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'