Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在方法中定义的匿名函数中使用`self:::`访问类常量?_Php_Anonymous Function - Fatal编程技术网

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

Php 如何在方法中定义的匿名函数中使用`self:::`访问类常量?,php,anonymous-function,Php,Anonymous Function,我想从匿名函数中使用self访问类常量 class My_Class { const CLASS_CONSTANT = 'test value'; private function my_function(){ $lambda_function = function(){ echo self::CLASS_CONSTANT; }; $lambda_function(); } }

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

class My_Class {    
    const  CLASS_CONSTANT = 'test value';
    private function my_function(){     
        $lambda_function = function(){
            echo self::CLASS_CONSTANT;
        };
        $lambda_function();
    }
}
当我尝试此操作时,我得到错误:

致命错误:在中没有活动的类作用域时无法访问self::


是否可以将父类传递到此匿名函数的作用域中?
使用
语句有效吗?

如果在匿名函数中访问self,这将不起作用。您应该做的是使用
My_Class::Class_CONSTANT
而不是自引用。

afaik匿名函数就是这样。。功能。不是类方法,所以范围不在范围之内。您可以将常量作为参数传递,也可以使用My_Class::Class_常量。

不,这是不可能的。同样,不能将$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'

>所有版本都在3v4l
私有函数my_function()use($any_variable){…}
上测试PHP5.4+方式,显然,它适用于除
$this
之外的任何变量。为什么它不能与
$this
一起使用呢?因为PHP的开发人员很难正确地实现它。不过,它在即将发布的PHP版本(5.4.0)中可用。如果您不想通过名称引用该类,可以使用magic常量
\uuuuuuu class\uuuuuuu
,它可以有效地取代您在lambda函数中对
self
的需求“我可能会用它。不过需要两行<代码>$class\u name=\uuuu class\uuuu$class_name::class_常量\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu不起作用。旁注:没有什么可以阻止您将$this变量传递到匿名函数的“use”部分。您只需要将其分配给中介变量,比如$that=$this,然后函数()use($that){}将引用当前对象。在匿名类中调用静态方法(如static::Func())怎么样?(是的
My_Class::Func()
可以工作,但这不是重点)静态函数的$this等价物是什么?您可以调用
$self::Func()
,即使它是受保护的或私有的,因为您从类本身的上下文调用它。但我不是绝对肯定。。。试试看
$object::static()
是您的朋友。在PHP5.5中,可以在匿名函数中使用
self
,而无需使用
use
关键字
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();
    }
}
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 $
    }
}