2017-01-18 9 views
1

設定を解除する目的はありますか$data?それは大きなデータが含まれている場合、私はそれを解除する必要がありますか?関数内でunsetを使うべきですか?

<?php 
require 'db.php'; 
class Test{ 
    public $id = 0; 
    public $name; 
    public function __construct() 
    { 
     $this->getUserInfo(); 
     echo $this->name; 
    } 
    private function getUserInfo() 
    { 
     global $db; 
     $query = $db->prepare('SELECT id,name FROM users WHERE group = :g LIMIT 1'); 
     if ($query->execute(array('g' => 'admin'))) 
     { 
      $data = $query->fetch(); // <-- 
      $this->id = $data[0]; 
      $this->name = $data[1]; 
      return true; 
     } 
    } 
} 
(new Test); 
?> 
+0

あなたが使用しているPHPのバージョンを魔法使いにしたことはありませんでした。しかし時には、いくつかのPHPバージョンでは、ローカル変数は、コレクターによって訂正されていないので、 '$ data = null; unset($ data);'をしたいことがあります。 – JustOnUnderMillions

+0

ここではその話題について多くの人が読んでいます:http://stackoverflow.com/questions/2461762/force-freeing-memory-in-php概要を知るにはコメントも読んでください。 – JustOnUnderMillions

+0

@JustOnUnderMillionsありがとう、私はPHP 7.0.9を使用しています。私はそれが正しくそれをきれいにするだろうと思う。 – Tufan

答えて

2

必要ありません。関数が復帰すると、変数はそれ自身で消えます。

また、設定を解除しても、$this->id$this->nameに含まれる値への参照が残っているため、そのメモリは再利用されません。再利用する唯一のメモリは、それらを指し示す小さな配列オブジェクトです。

割り当てを行うと、PHPはコピーを作成しません。文字列と数字は不変なので、コピーする必要はありません。オブジェクトは参照によってコピーされます。また、配列はコピーオンライト技術を使用しているため、古い参照がまだ存在していて、コピーを変更した場合にのみ後でコピーします。

+0

'$ this-> id = trim($ data [0]);'この時点で参照を禁止するには? – JustOnUnderMillions

+0

はい、新しい文字列が作成されるためです。 – Barmar

+0

新しい変数の内容/値を変更していない限り、 'everthing'はPHPでの参照と言うことができます。複雑なコードでの参照のリフレクションを防ぐために、 '$ data = null; 'のようなことをするのはちょっとお金ではないでしょうか? – JustOnUnderMillions

関連する問題