私の知る限り(これは非常に少ない)、次の2つの方法があります。
$var = new object()
次に:
// Method 1: Set to null
$var = null;
// Method 2: Unset
unset($var);
他のより良い方法?ここで毛を分けていますか?
これに関するいくつかの誤解を説明する便利な投稿:
これは、デストラクタがどのように機能するかについてのいくつかの誤解をカバーしています。 PHP5のドキュメントによると、明示的に呼び出しても変数は実際には破棄されません。
PHP 5では、C++などの他のオブジェクト指向言語のデストラクタの概念に似ています。デストラクタメソッドは、特定のオブジェクトへの他の参照がなくなるとすぐに、またはシャットダウンシーケンス中に任意の順序で呼び出されます。
上記の投稿では、割り当てられたメモリを指し示すものが他にない限り、変数をnullに設定しても機能する場合があると述べています。
短い答え:両方が必要です。
私は正しい答えが与えられたように感じますが、最小限です。通常、「速度」にはunset()が最適ですが、メモリをすぐに(CPUを犠牲にして)再利用する場合は、nullを使用する必要があります。
他の人が言ったように、nullに設定してもすべてが回収されるわけではなく、オブジェクトの破壊を防ぐ共有メモリ(クローン化されていない)オブジェクトを持つことができます。さらに、他の人が言ったように、とにかくオブジェクトを明示的に「破壊」することはできないので、とにかくしようとするべきではありません。
あなたにとって最適なものを見つける必要があります。また、unsetまたはnullで呼び出されるオブジェクトに__destruct()を使用できますが、他の人が言ったように、直接使用しないでください。
見る:
http://www.stoimen.com/blog/2011/11/14/php-dont-call-the-destructor-explicitly/
これは、オブジェクトを破棄できないこと、オブジェクトへのリンクのみを破棄できることを示す簡単な証明です。
$var = (object)['a'=>1];
$var2 = $var;
$var2->a = 2;
unset($var2);
echo $var->a;
返す
2
こちらで実際にご覧ください: https://eval.in/10541
新しいmysqliオブジェクトを作成している場合があります。
$MyConnection = new mysqli($hn, $un, $pw, $db);
しかし、オブジェクトを閉じた後でも
$MyConnection->close();
print_r()
を使用して$MyConnection
の内容を確認すると、次のようなエラーが表示されます。
Error:
mysqli Object
Warning: print_r(): Property access is not allowed yet in /path/to/program on line ..
( [affected_rows] => [client_info] => [client_version] =>.................)
この場合、unlink()
はパス名文字列を必要としますが、この場合は$MyConnection
はオブジェクトであるため、unlink()
は使用できません。
そのため、値をnullに設定する別の選択肢があります。
$MyConnection = null;
予想通り、物事はうまくいきます。変数$MyConnection
内にコンテンツがなく、mysqliオブジェクトを既にクリーンアップしています。
変数の値をnull
に設定する前にオブジェクトを閉じることをお勧めします。