WeakRef
PHP Manual

Weakref::acquire

(PECL weakref >= 0.1.0)

Weakref::acquireオブジェクトへの強い参照を確保する

説明

public bool Weakref::acquire ( void )

オブジェクトへの強い参照を確保し、事実上、弱い参照を強い参照に切り替えます。

Weakref は内部的な確保カウンタを管理して、 未処理の強い参照を追跡します。 Weakref::acquire() の呼び出しが成功すると、このカウンタがひとつ加算されます。

パラメータ

この関数にはパラメータはありません。

返り値

その参照が有効で、かつ強い参照に切り替えられた場合に TRUE、 それ以外の場合に FALSE を返します。

例1 Weakref::acquire() の例

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destroying object!\n";
    }
}

$o1 = new MyClass;

$r1 = new Weakref($o1);

$r1->acquire();

echo 
"Unsetting o1...\n";
unset(
$o1);

$o2 $r1->get();

$r1->release();

echo 
"Unsetting o2...\n";
unset(
$o2);
?>

上の例の出力は以下となります。

Unsetting o1...
Unsetting o2...
Destroying object!

例2 ネストした確保と解放の例

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destroying object!\n";
    }
}

$o1 = new MyClass;

$r1 = new Weakref($o1);

echo 
"Acquiring...\n";
$r1->acquire();

echo 
"  Unsetting...\n";
unset(
$o1);

echo 
"  Acquiring...\n";
$r1->acquire();

echo 
"    Acquiring...\n";
$r1->acquire();

echo 
"    Releasing...\n";
$r1->release();

echo 
"  Releasing...\n";
$r1->release();

echo 
"Releasing...\n";
$r1->release();

?>

上の例の出力は以下となります。

Acquiring...
  Unsetting...
  Acquiring...
    Acquiring...
    Releasing...
  Releasing...
Releasing...
Destroying object!

参考


WeakRef
PHP Manual