teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2015/07/07 04:19

投稿

ngyuki
ngyuki

スコア4516

answer CHANGED
@@ -73,4 +73,5 @@
73
73
  }
74
74
  ```
75
75
 
76
- (これもかなり限定的すが)
76
+ っとも、PHP でオブジェクトの寿命をプログラムら制御するのは下記のよう理由でかな困難なの、普通はこんなことまでは考えません。
77
+ [オブジェクトが例外の呼び出し履歴に参照されてデストラクタが呼ばれない - ngの日記](http://ngyuki.hatenablog.com/entry/20121021/p1)

1

追記

2015/07/07 04:19

投稿

ngyuki
ngyuki

スコア4516

answer CHANGED
@@ -51,4 +51,26 @@
51
51
  }
52
52
  var_dump($a[2]); // 4
53
53
  }
54
- ```
54
+ ```
55
+
56
+ ---
57
+
58
+ また、オブジェクトやリソースの場合、unset でデストラクタやリソースの解放が行われたりします。
59
+ さらに PHP にはブロックスコープがないので、次のような状況で unset した方がいいこともあります。
60
+
61
+ ```lang-php
62
+ try {
63
+ // 例えば Hoge がファイルのロックをつかむ場合
64
+ $obj = new Hoge(__DIR__ . '/hoge.lock');
65
+
66
+ // いろいろ
67
+
68
+ } catch (Exception $ex) {
69
+ // ここで Hoge がファイルをロックしたままだとまずい場合は unset が必要
70
+ unset($obj);
71
+
72
+ // いろいろ
73
+ }
74
+ ```
75
+
76
+ (これもかなり限定的ですが)