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 に答える