1

我正在尝试缓存反射对象。看代码:

class A {

        public function __construct() {
        }

}

$memcache = new Memcache();

$memcache->addServer('127.0.0.1', 11211);

$r = new ReflectionClass('A');

$memcache->set('a', $r);

$r = $memcache->get('a');

$a = $r->newInstanceArgs(array()); //here occurred the error

当我运行它产生的脚本时:

PHP Fatal error:  ReflectionClass::newInstanceArgs(): 
Internal error: Failed to retrieve the reflection object

我也尝试过使用 APC 以及序列化和反序列化,但没有任何改变。

4

1 回答 1

1

反射对象依赖于实例引用和虚拟属性;其中,是 PHP 内部的,不能被序列化。

// Stores only serialized reference to ReflectionClass
$memcache->set('a', $r);
//=> O:15:"ReflectionClass":1:{s:4:"name";s:1:"A";}

// Retrieves only a class instance & 1 attribute
$r = $memcache->get('a');
//=> ReflectionClass { public $name = "A"; }

要从未序列化的类重建 ReflectionClass,请使用给定名称重新初始化该类;

$r = $memcache->get('a');
$r = new ReflectionClass($r->name);
$a = $r->newInstanceArgs(array());
于 2012-08-24T14:22:33.717 回答