PDA

View Full Version : unset کردن یک شئ ؟



abolfazl-z
پنج شنبه 30 خرداد 1392, 11:49 صبح
سلام دوستان :لبخندساده:

دوستان اگر ما یک آبجکتی از یک کلاس درست کرده باشیم و در اون کلاس بسیاری از متغیر ها در حافظه باشد.
حالا ما با unset کردن آبجکت موردنظر تمام متغیر ها(کلا فضایی که اون کلاس گرفته) از حافظه پاک می شود ؟

و یا نه ما باید تک تک این کار ها را انجام دهیم ؟

و همچنین اگر یک متغیری در یک تابع تعریف می شود هنگامی که به انتهای تابع(اتمام کار تابع) می رسد مگر تمام متغیر های آن از حافظه بصورت خودکار خارج نمی شود ؟

امیـرحسین
پنج شنبه 30 خرداد 1392, 12:00 عصر
یه شی رو unset کنید یا مساوی null قرار بدید همه حافظه‌ی اختصاص یافته بهش آزاد میشه. البته اگر درگیری دیگه‌ای با حافظه هم داریم مثل اتصال به دیتابیس یا یه Resource باید دستی (توسط متد destruct__) آزادشون کنیم.
متغیرهای داخل تابع اگر reference یا static نباشن با اتمام تابع حذف میشن.

abolfazl-z
پنج شنبه 30 خرداد 1392, 12:58 عصر
میشه درباره متد destruct__ یکم بیشتر توضیح دهید ؟

امیـرحسین
پنج شنبه 30 خرداد 1392, 13:58 عصر
وقتی یه شی داره از حافظه خارج میشه (دستی یا توسط خود PHP) اگر متد ()destruct__ (http://www.php.net/manual/en/language.oop5.decon.php#object.destruct) داشته باشه اجرا میشه.
تو این متد باید منابعی که با حذف شی باقی میمونن رو حذف کرد. مث کانکشن‌ها، Resource ها، Sessionها و غیره...

نمونه:

class A {
private $curl;
private $file;
private $prop;

public __construct() {
// do something
}

public connect() {
$this->curl = curl_init("http://www.example.com/");
$this->file = fopen("example_homepage.txt", "w");
}

// ...

public __destruct() {
curl_close($this->curl);
fclose($this->file);
}
}