Изменить, чтобы заметить, Этот ответ изначально предназначался для 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" );