PHP配列に格納されているClientクラスオブジェクトの配列があります。配列内のこれらのオブジェクトの1つが必要な場合がありunset()
、ソケット接続を明示的に閉じることを心配する必要はありません。私のためにそれをしたい__destruct()
です。
class A{
private $id;
public function __construct( $id ){
$this->id = $id;
}
public function __destruct(){
echo "Calling destruct on " . $this->id . ".\n";
}
}
$array = array();
for($i=0;$i<5;$i++){
$array[$i] = new A($i);
}
unset($array[3]);
print_r($array);
デストラクタは、破壊している要素に対して適切に起動されます。ただし、要素が破棄されていなくても、配列内の他のすべてのデストラクタが呼び出されます。なんで?
Calling destruct on 3.
Array
(
[0] => A Object
(
[id:A:private] => 0
)
[1] => A Object
(
[id:A:private] => 1
)
[2] => A Object
(
[id:A:private] => 2
)
[4] => A Object
(
[id:A:private] => 4
)
)
Calling destruct on 0.
Calling destruct on 1.
Calling destruct on 2.
Calling destruct on 4.
なぜこれが起こっているのですか、そして私にはどのような選択肢がありますか?