PHP-তে OOP-তে যাদু দ্বারা বৈশিষ্ট্য লেখা

যাদু পদ্ধতি __set কল করা হয় যখন একটি অস্তিত্বহীন বা লুকানো বৈশিষ্ট্যের মান পরিবর্তন করার চেষ্টা করা হয়। এটি প্যারামিটার হিসেবে সেই বৈশিষ্ট্যের নাম এবং যে মানটি নির্ধারণ করার চেষ্টা করা হচ্ছে তা গ্রহণ করে।

আসুন একটি ব্যবহারিক উদাহরণ দেখি। ধরুন আমাদের কাছে Test নামে একটি ক্লাস আছে:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
  }
?>

আসুন এই ক্লাসে __set যাদু পদ্ধতি তৈরি করি, যা var_dump ফাংশন ব্যবহার করে যে বৈশিষ্ট্যে অ্যাক্সেসের চেষ্টা করা হয়েছে তার নাম এবং মান প্রিন্ট করবে, যেটি নির্ধারণ করার চেষ্টা করা হচ্ছে:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      var_dump($property . ' ' .$value);
    }
  }
?>

আসুন আমাদের ক্লাসের কাজ পরীক্ষা করি:

index.php<?php
  $test = new Test;
  $test->prop = 'value'; // __set মেথডের var_dump 'prop value' আউটপুট করবে
?>

এখন আসুন সেই বৈশিষ্ট্যে মান সেট করি, যার নাম $property ভেরিয়েবলে সংরক্ষিত আছে:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      $this->$property = $value; // মান সেট করছি
    }
  }
?>

এখন আমরা ক্লাসের বাইরে থেকেও প্রাইভেট বৈশিষ্ট্যগুলিতে মান লিখতে সক্ষম হব:

index.php<?php
  $test = new Test;
  
  $test->prop1 = 1; // 1 লিখব
  $test->prop2 = 2; // 2 লিখব
?>

আমরা লিখতে পারি, তবে, সেখানে কিছু লিখেছে কিনা তা পরীক্ষা করা যাবে না, কারণ বৈশিষ্ট্যগুলি প্রাইভেট।

এই বৈশিষ্ট্যগুলির জন্য একটি গেটার তৈরি করা যেতে পারে বা শুধু __get যাদু পদ্ধতিটি ব্যবহার করা যেতে পারে। দ্বিতীয় বিকল্পটি ব্যবহার করি:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      $this->$property = $value;
    }
    
    // বৈশিষ্ট্যের জন্য যাদু গেটার:
    public function __get($property)
    {
      return $this->$property;
    }
  }
?>

এখন আমরা আমাদের ক্লাসের কাজ পরীক্ষা করতে পারি। পরীক্ষা করি:

index.php<?php
  $test = new Test;
  
  $test->prop1 = 1; // 1 লিখব
  $test->prop2 = 2; // 2 লিখব
  
  echo $test->prop1; // 1 আউটপুট করবে
  echo $test->prop2; // 2 আウউটপুট করবে
?>

অবশ্যই, বাস্তবে প্রাইভেট বৈশিষ্ট্যগুলিতে সবার জন্য লিখার অনুমতি দেওয়া উচিত নয়, অন্যথায় এই প্রাইভেট বৈশিষ্ট্যগুলির উদ্দেশ্য নষ্ট হয়ে যায় (সেগুলিকে পাবলিক করে দেওয়াই更容易 হবে)।

সুতরাং এই পদ্ধতিটি শুধুমাত্র তখনই প্রয়োগ করা উচিত যখন সত্যিই এর প্রয়োজন হয়। পরের পাঠগুলোতে আমরা সফল প্রয়োগের আরও উদাহরণ দেখব।