それはあなたが何を意味するかに大きく依存します。
現在の参照を空にするには、いつでも実行できます
$array = array();
現在のインスタンスをスコープから完全に削除するには
unset($array);
残念ながら、どちらの場合も、各要素に関連付けられたメモリが解放されるとは限りません。
PHP は、変数の「参照」と呼ばれるものを使用します。変数は実際には、データの実際のコンテナーではなく、データを指すラベルまたは参照です。PHPガベージ コレクターは、この問題についてより多くの洞察を提供できます。
次に、ドキュメントから取得したこの例を見てください。
$a = "new string";
$c = $b = $a;
xdebug_debug_zval( 'a' );# a: (refcount=3, is_ref=0)='new string'
unset( $b, $c );
xdebug_debug_zval( 'a' );# a: (refcount=1, is_ref=0)='new string'
残念ながら、これはすべての変数に当てはまります。配列を含む。配列に関連付けられたメモリをクリーンアップすることは、まったく別の問題です。
個々のキーで unset() を使用することに関するコメントの長い議論に気付きました。
これは非常に悪い習慣のように感じます。次のコードを検討してください。
class A{
function __construct($name){$this->name=$name;}
function __destruct(){echo $this->name;}
}
$a=array();
$b=array();
$c=array();
for($i=0;$i<5;$i++) {
$a[]=new A('a');
$b[]=new A('b');
$c[]=new A('c');
}
unset($a);
$b=array();
echo PHP_EOL.'done'.PHP_EOL;
これは出力されます:
aaaaabbbbb
done
ccccc
特定のデータ構造への参照が 0 に達すると、メモリから削除されます。=array()
とはどちらもunset
同じことを行います。
実際に必要ない場合は、array()
次を使用できますnull
。
$array=null;
これにより、ラベルはメモリに保持されますが、ラベルが保持していた特定のデータへの参照は削除されます。