Ken*_*ins 12 php closures scope
我试图从一个闭包中引用一个对象的私有变量.下面的代码似乎有效,但它抱怨Fatal error: Cannot access self:: when no class scope is active in test.php on line 12和Fatal error: Using $this when not in object context in test.php on line 20.
任何想法如何使用闭包完成相同的结果,同时保持变量私有和没有帮助函数(击败私有变量的整个想法).
class MyClass
{
static private $_var1;
private $_var2;
static function setVar1( $value )
{
$closure = function () use ( $value ) {
self::$_var1 = $value;
};
$closure();
}
function setVar2( $value )
{
$closure = function () use ( $value ) {
$this->_var2 = $value;
};
$closure();
}
}
MyClass::setVar1( "hello" ); //doesn't work
$myclass = new MyClass;
$myclass->setVar2( "hello" ); //doesn't work
Run Code Online (Sandbox Code Playgroud)
Art*_*cto 14
编辑注意,这个答案最初是针对PHP5.3及更早版本的,现在可能.有关最新信息,请参阅此答案.
这不是直接可能的.特别是,闭包没有相关的范围,因此它们无法访问私有和受保护的成员.
但是,您可以使用引用:
<?php
class MyClass
{
static private $_var1;
private $_var2;
static function setVar1( $value )
{
$field =& self::$_var1;
$closure = function () use ( $value, &$field ) {
$field = $value;
};
$closure();
}
function setVar2( $value )
{
$field =& $this->_var2;
$closure = function () use ( $value, &$field ) {
$field = $value;
};
$closure();
}
}
MyClass::setVar1( "hello" );
$myclass = new MyClass;
$myclass->setVar2( "hello" );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5560 次 |
| 最近记录: |