PHP-তে OOP-তে রেফারেন্স দ্বারা অবজেক্ট পাস করা

ধরুন আমাদের এখানে User নামে একটি ক্লাস আছে:

User.php<?php
  class User
  {
    public $name;
    public $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age  = $age;
    }
  }
?>

ধরুন আমরা এই ক্লাসের একটি অবজেক্ট তৈরি করি:

index.php<?php
  $user = new User('john', 30);
?>

এখন নিম্নলিখিত পরিস্থিতি কল্পনা করুন: আপনি $user ভেরিয়েবলের মান অন্য কোনো ভেরিয়েবলে অ্যাসাইন করতে চান, যেমন $test।

যদি অবজেক্টের পরিবর্তে প্রিমিটিভ টাইপ নিয়ে কথা হত, যেমন স্ট্রিং, নাম্বার, অ্যারে ইত্যাদি, তাহলে $test ভেরিয়েবলে $user ভেরিয়েবলের মানের একটি কপি যেত।

এর মানে হল যে, পরবর্তীতে যেকোনো একটি ভেরিয়েবল পরিবর্তন করলে অন্য ভেরিয়েবলের মান পরিবর্তন হত না। একটি উদাহরণ দেখা যাক:

index.php<?php
  $user = 1;
  
  $test = $user; // $test ভেরিয়েবলে এখন 1 আছে
  $test = 2;     // $test ভেরিয়েবলে এখন 2 আছে, কিন্তু $user-এ এখনও 1 আছে
?>

অবজেক্টের ক্ষেত্রে বিষয়টি ভিন্ন - যখন অন্য একটি ভেরিয়েবলে অ্যাসাইন করা হয়, অবজেক্টগুলি কপি হয় না, বরং রেফারেন্স দ্বারা পাস করা হয়: এর মানে হল যে এই উভয় ভেরিয়েবলের মান হিসাবে একই অবজেক্ট থাকে। এর একটি গুরুত্বপূর্ণ ফলাফল আছে: যদি একটি ভেরিয়েবল ব্যবহার করে অবজেক্টের কোনো প্রপার্টি পরিবর্তন করা হয়, দ্বিতীয় ভেরিয়েবলেও একই পরিবর্তন দেখা যাবে।

আসুন অনুশীলনে দেখি। ইউজার নিয়ে একটি অবজেক্ট তৈরি করি:

index.php<?php
  $user = new User('john', 30);
?>

অবজেক্টটিকে অন্য একটি ভেরিয়েবলে অ্যাসাইন করি:

index.php<?php
  $test = $user;
?>

$test ভেরিয়েবলে name প্রপার্টি পরিবর্তন করি

index.php<?php
  $test->name = 'eric';
?>

আসুন পরীক্ষা করে দেখি যে শেয়ারকৃত অবজেক্টটি পরিবর্তিত হয়েছে কিনা। $user ভেরিয়েবল থেকে name প্রপার্টি আউটপুট করি:

index.php<?php
  echo $user->name; // আউটপুট দেবে 'eric'!
?>
Задание 1

একটি Product ক্লাস তৈরি করুন, যেখানে নিম্নলিখিত প্রপার্টি থাকবে: name, price।

Задание 2

Product ক্লাসের একটি অবজেক্ট তৈরি করুন, এটিকে $product1 ভেরিয়েবলে লিখুন।

Задание 3

$product1 ভেরিয়েবলের মান $product2 ভেরিয়েবলে অ্যাসাইন করুন। পরীক্ষা করুন যে উভয় ভেরিয়েবল একই অবজেক্টকে রেফার করছে।