PHP-তে OOP-এ ক্লাস অটোলোড করার জন্য নিজস্ব ফাংশন
প্রায়ই ডিফল্ট অটোলোড কোনো কারণে আপনার জন্য উপযুক্ত নাও হতে পারে। এমন ক্ষেত্রে, আপনি নিজের অটোলোড ফাংশন লিখতে পারেন।
এটি করার জন্য, আপনাকে spl_autoload_register ফাংশনের প্রথম প্যারামিটার হিসেবে আপনার লেখা একটি কলব্যাক ফাংশন পাস করতে হবে। এই ফাংশনটি কল হবে যখন PHP একটি আনলোডেড ক্লাসে অ্যাক্সেস শনাক্ত করবে। এই ফাংশনের প্যারামিটারে ক্লাসের নাম নেমস্পেস সহ পাস করা হবে:
<?php
spl_autoload_register(function($class) {
// $class ভেরিয়েবলে নেমস্পেস সহ ক্লাসের নাম থাকবে
});
?>
আর ফাংশনের দায়িত্ব হবে ক্লাসের নাম অনুসারে require ব্যবহার করে সেই ক্লাস লোড করা। অর্থাৎ, এই ফাংশনের ভিতরে আমাদের ক্লাস লোড করার জন্য আমাদের নিজস্ব নিয়ম, অর্থাৎ আমাদের নিজস্ব নেমিং কনভেনশন লিখতে হবে।
আসুন আমরা আমাদের নিজস্ব একটি অটোলোড ফাংশনের উদাহরণ লিখি। ধরুন, উদাহরণস্বরূপ, আমরা বলি যে সাইটের রুট থেকে ক্লাস ফাইলের পাথ হবে নেমস্পেসের মতোই, কিন্তু কেস সংবেদনশীল।
অর্থাৎ, আমাদের যদি Core\Admin\PageController ক্লাসটি থাকে, তবে এর পাথ হওয়া উচিত Core/Admin/PageController.php।
আপনি দেখতে পাচ্ছেন, নেমস্পেস সহ ক্লাসের নাম রূপান্তর করতে আপনাকে simplemente ব্যাকস্ল্যাশগুলিকে ফরওয়ার্ড স্ল্যাশ দিয়ে প্রতিস্থাপন করতে হবে এবং ক্লাসের নামের শেষে .php যোগ করতে হবে। আসুন এটি করা যাক:
<?php
spl_autoload_register(function($class) {
$filename = str_replace('\\', '/', $class) . '.php';
require($filename);
});
?>
যাইহোক, আমাদের ফাইলের জন্য একটি আপেক্ষিক পাথ (সাইটের রুটের সাপেক্ষে) তৈরি হবে। পরম পাথ তৈরি করা ভাল, এভাবে:
<?php
spl_autoload_register(function($class) {
$root = $_SERVER['DOCUMENT_ROOT'];
$filename = $root . '/' . str_replace('\\', '/', $class) . '.php';
require($filename);
});
?>
আরও একটি সূক্ষ্ম বিষয় আছে। বিভিন্ন অপারেটিং সিস্টেমে ফোল্ডার বিভাজক হিসেবে ফরওয়ার্ড স্ল্যাশ বা ব্যাকস্ল্যাশ ব্যবহার হতে পারে। আসুন আমাদের কোডটি অপারেটিং সিস্টেম থেকে স্বাধীন করি। এটি করার জন্য, ফরওয়ার্ড স্ল্যাশের পরিবর্তে আমরা DIRECTORY_SEPARATOR কনস্ট্যান্ট ব্যবহার করব, যাতে সঠিক স্ল্যাশ থাকে যে অপারেটিং সিস্টেমে আমাদের স্ক্রিপ্ট চলছে। শেষ পর্যন্ত আমরা নিম্নলিখিত কোড পাই:
<?php
spl_autoload_register(function($class) {
$root = $_SERVER['DOCUMENT_ROOT'];
$ds = DIRECTORY_SEPARATOR;
$filename = $root . $ds . str_replace('\\', $ds, $class) . '.php';
require($filename);
});
?>
আমার তৈরি করা অটোলোড ফাংশনটি পরীক্ষা করুন।
আপনার নিজস্ব অটোলোড নিয়ম নিয়ে আসুন এবং এটি বাস্তবায়ন করুন।