কম্পিউটার টিউটোরিয়াল

PHP-তে ফাইনাল ক্লাস ও ফাইনাল মেথড ব্যাখ্যা

final কিওয়ার্ড PHP 5-এ অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং কনসেপ্টের সাথে যোগ করা হয়েছে।

কিন্তু final-এ যাওয়ার আগে, আমাদের নিশ্চিত হতে হবে যে ইনহেরিটেন্স কনসেপ্ট সম্পর্কে আমাদের ভালো ধারণা রয়েছে। ইনহেরিটেন্সে, আমরা একটি ক্লাসকে অন্য ক্লাস থেকে ইনহেরিট করতে পারি। এছাড়া, আমরা একটি ইনহেরিটেড ক্লাসে একটি ফাংশন ওভাররাইড করতে পারি, যাতে 본래 প্রদত্ত বিহেভিয়ার রিপ্লেস হয়। কিছু কেসে, আমরা একটি ক্লাসকে ইনহেরিট হওয়া থেকে বাধা দিতে চাই বা একটি ফাংশনকে ওভাররাইড হওয়া থেকে বাধা দিতে চাই। এটি final দিয়ে অর্জন করা যায়, ক্লাস এবং ফাংশনের সাথে final কিওয়ার্ড প্রিফিক্স করলে যা মূলত PHP-কে এরর প্রোডিউস করতে বাধ্য করে যদি কেউ ফাইনাল ক্লাস এক্সটেন্ড করার চেষ্টা করে বা ফাইনাল ফাংশন ওভাররাইড করার চেষ্টা করে।

নোট:

আমরা শুধু মেথড এবং ক্লাসের সাথে final কিওয়ার্ড ব্যবহার করতে পারি।

নিচের উদাহরণগুলো দিয়ে কনসেপ্টটি প্রদর্শন করা হলো।

উদাহরণ:

পেরেন্ট ক্লাস ফাংশন ওভাররাইড করা যায় না।

<?php 
class BaseClass{ 
    final function calculate($val1,$val2){ 
        $sum = $val1+$val2; 
        echo "Sum of given no=".$sum; 
    } 
} 
class ChildClass extends BaseClass{ 
    function calculate($x,$y){ 
        $mult=$val1*$val2; 
        echo "Multiplication of given no=".$mult; 
    } 
} 
$obj = new ChildClass(); 
$obj->show(10,10); 
?>

আউটপুট:

PHP Fatal error: Cannot override final method BaseClass::calculate()

ব্যাখ্যা:

উপরোক্ত উদাহরণে BaseClass পেরেন্ট ক্লাস। যাতে calculate মেথডটি ফাইনাল হিসেবে চিহ্নিত করা হয়েছে। এর মানে এর কোনো চাইল্ড ক্লাসে show মেথড ওভাররাইড করা যাবে না। এরর চিহ্নিত করতে ChildClass ফাইনাল মেথড show() ডিফাইন করার চেষ্টা করছে। এটি একটি ফেটাল এরর প্রোডিউস করবে, এর মানে পেরেন্ট ক্লাসের ফাইনাল মেথড এর চাইল্ড ক্লাসে ডিফাইন করা যাবে না।

উদাহরণ:

ক্লাসের আগে "Final" কিওয়ার্ড ব্যবহার।

<?php 
final class BaseClass{ 
    function printData($val1,$val2){ 
        $add=$val1+$val2; 
        echo "Sum of given no=".$s; 
    } 
} 
class Child extends BaseClass{ 
    function printData($val1,$val2){ 
        $m=$val1*$val2; 
        echo "Multiplication of given no=".$m; 
    } 
} 
$obj = new Child(); 
$obj->printData(20,20); 
?>

আউটপুট:

PHP Fatal error: Class Child may not inherit from final class (BaseClass)

ব্যাখ্যা:

উপরোক্ত উদাহরণে BaseClass ক্লাসটি final দিয়ে ডিফাইন করা হয়েছে, ফলে আমরা এই ক্লাস এক্সটেন্ড করতে পারি না। যখন Class Child BaseClass-এ এক্সটেন্ড করার চেষ্টা করে (যা বোঝায় Child হলো BaseClass-এর চাইল্ড ক্লাস)। এই অবস্থায় PHP একটি এরর মেসেজ থ্রো করে "Class Child may not inherit from the final class (BaseClass)"। এর মানে BaseClass-এর কোনো চাইল্ড ক্লাস তৈরি করার অনুমতি দেবে না।

  1. C#-এ final, finally এবং finalize (final, finally and finalize)

  2. C#-এ ফাইনাল কীওয়ার্ড (Final Keyword) - sealed ব্যবহার

  3. জাভাতে Static এবং Final কীওয়ার্ডের পার্থক্য

  4. পাইথন ক্লাস মেথড চেইনিং ব্যাখ্যা