Weak Maps PHP 7.4-এ যোগ করা হয়েছিল। এটি অবজেক্ট エン্টিটি ক্লাসে ক্যাশ রেফার করে থাকলে অবজেক্ট রিমুভ বা ডিলিট করতে ব্যবহার করা যায়। এটি সেই অবজেক্টগুলোর রেফারেন্স ধারণ করে, যা মেমরি গার্বেজ কালেক্টেড হতে বাধা দেয় না। PHP 8-এ, weak maps আমাদের র্যান্ডম ডেটা অবজেক্টের সাথে লিঙ্ক করতে দেয়, কোনো মেমরি লিক ছাড়া।
অন্য কথায়, PHP 8-এ একটি weak map হলো অবজেক্টের একটি গ্রুপ যেখানে কী দুর্বলভাবে রেফারেন্স করে। একটি weak map একটি ক্লাস ব্যবহার করে একটি অবজেক্ট তৈরি করে যা কী হিসেবে ব্যবহার করা যায়, যা weak map রিমুভ এবং ডিস্ট্রয় করতে সাহায্য করে যদি আর কোনো রেফারেন্স না থাকে। দীর্ঘমেয়াদে প্রক্রিয়ায়, এটি মেমরি লিক এড়াতে সাহায্য করে, যা চূড়ান্ত পারফরম্যান্স উন্নত করে।
আমরা বলতে পারি weak map একটি অটোমেটিক গার্বেজ কালেকশন প্রক্রিয়া হিসেবে কাজ করে। যখনই একটি ভেরিয়েবল ডিলিট হয়, PHP চেক করে যে কোনো ভেরিয়েবল এখনও সেই অবজেক্টকে রেফারেন্স করছে কিনা। যদি ভেরিয়েবলটি রেফারেন্স না করে, তবে PHP সেই অবজেক্টকে নিরাপদে ডিলিট করবে। এই প্রক্রিয়াকে গার্বেজ কালেকশন বলা হয়।
উদাহরণ: PHP 8-এ Weak Maps
<?php class WeakExample { public WeakMap $cache; public function __construct() { $this->cache = new WeakMap(); } public function getCaching(object $obj) { return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj); } public function computeSomethingExpensive(object $obj) { print_r("Object called"); return rand(1, 100); } } $cacheObject = new stdClass; $obj = new WeakExample; $obj->getCaching($cacheObject); $obj->getCaching($cacheObject); print_r(count($obj->cache)); unset($cacheObject); // অবজেক্ট এবং Weak Maps আনসেট করলে মেমরি মুক্ত হয় print_r(count($obj->cache)); ?>আউটপুট
Object called 1 0