PHPで変数を削除する方法

王林
リリース: 2023-02-24 15:42:02
オリジナル
4357 人が閲覧しました

PHPで変数を削除する方法

PHP 変数またはオブジェクトの破棄は、明示的な破棄と暗黙的な破棄に分けられます。

1. オブジェクトが参照されていない場合の明示的な破棄は、

2. 暗黙的な破棄、PHP はスクリプト言語であり、コードの最後の行が実行されると、要求されたすべてのメモリがすべて必要になります。解放される;

#上記の 2 つの破棄方法から、3 つの破棄方法を要約できます。つまり、

1、unset()

2. $varname=null

3. デストラクター __destruct()

例:

class Human { 
  public $name = '张三'; 
  public $gender = null; 
  public function __destruct() { 
      echo &#39;死了!<br />&#39;; 
  } 
} 
$a = new Human(); 
$b = $c = $d = $a;
unset($a);
$d=null;


echo &#39;<hr />&#39;;
var_dump($a);
echo &#39;<hr />&#39;;
var_dump($b);
echo &#39;<hr />&#39;;
var_dump($c);
echo &#39;<hr />&#39;;
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 = &#39;开始&#39;;        
     public function __destruct(){                
     echo &#39;结束&#39;;        
     }}
     $a = new Human;
     echo $a->name;
     unset($a);   //销毁函数 
     $a = new Human; 
     echo &#39;***********************&#39;;

输出的结果是:

开始结束***************************结束
ログイン後にコピー
class Human{       
     public  $name = &#39;开始&#39;;        
     public function __destruct(){                
        echo &#39;结束&#39;;        
     }}
     $a = new Human;
     $b = $a;
     echo $a->name;
     unset($a);   //销毁函数 
     $a = new Human; 
     echo &#39;***************************&#39;;

结果是:

开始***************************结束结束
ログイン後にコピー
上記の結果は、コードは最後の行の実行時に開始されず、オブジェクトが破棄されるときに自動的に実行されることを示しています。 human() 関数にも unset() があるのに最後にデストラクタ __destruct() が実行されるのは、参照渡し時にオブジェクトのメモリがキャンセルされず、オブジェクトが完全に破棄されないためです。

結論は次のとおりです: 手動で破棄しない場合、コードの実行が完了した後、システムはメモリが解放されたときに自動的にデストラクター __destruct() を実行します。オブジェクトが破棄された場合、自動的に実行されます。

推奨チュートリアル:

PHP ビデオ チュートリアル

以上がPHPで変数を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!