вызов fclose для приватной переменной с отражением

Частные переменные могут быть установлены следующим образом:

function setVar($obj, $var, $val)
{
$reflection = new ReflectionClass(get_class($obj));
$prop = $reflection->getProperty($var);
$prop->setAccessible(true);
return $prop->setValue($obj, $val);
}

Но это не так полезно, когда вы имеете дело с такой функцией, как fclose(),

Внешне это выглядит так:

Частные переменные могут быть доступны таким образом:

function &getVar($obj, $var)
{
$reflection = new ReflectionClass(get_class($obj));
$prop = $reflection->getProperty($var);
$prop->setAccessible(true);
return $prop->getValue($obj);
}

fclose(&$getVar($obj, 'fsock'));

Но в моем тестировании это не сработало.

Есть идеи?

0

Решение

Если вы удалите &, это работает просто отлично.

function getVar($obj, $var){
$reflection = new ReflectionClass(get_class($obj));
$prop = $reflection->getProperty($var);
$prop->setAccessible(true);
return $prop->getValue($obj);
}

Вот мой тестовый код:

class Foo{
private $handle;
}
$foo = new Foo;

$handle = fopen(__FILE__,'rb');
if($handle){
echo "file opened\n";
setVar($foo, 'handle', $handle);
if(fclose(getVar($foo, 'handle'))) echo "file closed\n";
}

Выход:

file opened
file closed
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]