PHP 変数またはオブジェクトの破棄は、明示的な破棄と暗黙的な破棄に分けられます。
1. オブジェクトが参照されていない場合の明示的な破棄は、
2. 暗黙的な破棄、PHP はスクリプト言語であり、コードの最後の行が実行されると、要求されたすべてのメモリがすべて必要になります。解放される;
#上記の 2 つの破棄方法から、3 つの破棄方法を要約できます。つまり、
1、unset()
2. $varname=null
3. デストラクター __destruct()
例:
class Human { public $name = '张三'; public $gender = null; public function __destruct() { echo '死了!<br />'; } } $a = new Human(); $b = $c = $d = $a; unset($a); $d=null; echo '<hr />'; var_dump($a); echo '<hr />'; var_dump($b); echo '<hr />'; var_dump($c); echo '<hr />'; var_dump($d); 结果如下: Notice: Undefined variable: a in /Library/WebServer/Documents/test.php on line 42 NULL object(Human)#1 (2) { ["name"]=> string(6) "张三" ["gender"]=> NULL } object(Human)#1 (2) { ["name"]=> string(6) "张三" ["gender"]=> NULL } NULL 死了!
最初のすべて、PHP では、変数名がメモリ スタックに格納されることを知る必要があります。変数名は、ヒープ内の特定のメモリのアドレスを指します。変数名を通じてヒープ内のメモリを見つけることができます。したがって、次のように結論付けることができます。結論:
<?php $a = 1; $b = &$a; unset($a); var_dump($a); var_dump($b);
結果は次のようになります:
Notice: Undefined variable: a in E:\amp\apache\htdocs\index.php on line 5 NULL int(1)
つまり、unset() は実際には変数内のメモリ値を破壊するのではなく、変数間の関係を切断するだけです。変数とメモリ。変数名も削除されますが、参照されている限りメモリは解放されません。PHP では、オブジェクトの値はデフォルトで参照によって渡されます。これは、人間のクラス、$a は unset( ) ですが、$b =$c = $d にはまだ値があります。
2. $varname=null、変数名はまだ存在しますが、メモリ値は削除されます。では、参照渡しの場合はどうなるでしょうか?例:
<?php $a = 1; $b = &$a; $a=null; var_dump($a); var_dump($b);
输出的结果是: NULL NULL
つまり、$varname=null の場合、変数名とメモリ ポインタはまだ存在しますが、メモリ内の値は完全に削除されます。
3. 上記の例からわかるように、PHP がコードの最後の部分の実行を終了すると、デストラクター __destruct() が開始されますが、この理解は十分正確ではありません。 ##<?php
class Human{
public $name = '开始';
public function __destruct(){
echo '结束';
}}
$a = new Human;
echo $a->name;
unset($a); //销毁函数
$a = new Human;
echo '***********************';
输出的结果是:
开始结束***************************结束
class Human{
public $name = '开始';
public function __destruct(){
echo '结束';
}}
$a = new Human;
$b = $a;
echo $a->name;
unset($a); //销毁函数
$a = new Human;
echo '***************************';
结果是:
开始***************************结束结束
上記の結果は、コードは最後の行の実行時に開始されず、オブジェクトが破棄されるときに自動的に実行されることを示しています。 human() 関数にも unset() があるのに最後にデストラクタ __destruct() が実行されるのは、参照渡し時にオブジェクトのメモリがキャンセルされず、オブジェクトが完全に破棄されないためです。
推奨チュートリアル:
PHP ビデオ チュートリアル以上がPHPで変数を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。