যারা বাংলাদেশের ৩৬ তম Zend Certified Engineer এবং এই সাইট (w3programmers) এর স্বত্বাধিকারী এবং লেখক Masud Alam স্যার এর কাছে কাছে সপ্তাহে ২ দিন ক্লাস, ৬ দিন প্রাকটিস করতে চান তাদের জন্য আগামী ১ February 2018 (বৃহস্পতি এবং শুক্রবার সন্ধ্যা ৬:০০ টা রাত ৯:০০ টা) থেকে শুরু হতে যাচ্ছে ৫ মাস ব্যাপী Professional Web Design & Development With HTML, CSS, JAVASCRIPT, JQUERY, PHP & MySQL for Beginners কোর্স (এই কোর্স টি যারা ফ্রিল্যান্সিং এবং আউটসোর্সিং কাজে আগ্রহী বিশেষ ভাবে তাদের জন্য design করা হয়েছে। ), আগামী ৪ February 2018 ( রবি এবং মঙ্গলবার সন্ধ্যা ৬:০০ টা থেকে রাত ৯:০০ টা ) থেকে শুরু হতে যাচ্ছে ৪ মাস ব্যাপী Zend Certified PHP 7.1 Engineering কোর্স। যেটা Advance PHP কোর্স নামে পরিচিত । এবং ৫ February 2018 (সোম এবং বুধবার সন্ধ্যা ৬:০০ টা থেকে রাত ৯:০০ টা) থেকে শুরু হতে যাচ্ছে ৪ মাস ব্যাপী Laravel 5.5 Professional Beginning to Advance Course কোর্স ।এই কোর্স গুলোতে তিনি ছাত্রদের কে সপ্তাহে ২ দিন ৩ ঘন্টা করে ৬ ঘন্টা ক্লাস নিবেন , এবং শনি থেকে বৃহস্পতি সপ্তাহে ৬ দিন ই স্যার এর অফিসে বসে প্রাকটিস করার সুযোগ দিবেন ! এতে প্রাকটিস করা কালীন ছাত্র-ছাত্রীরা কোনো সমস্যায় পড়লে তাৎক্ষণিক স্যার এর সহযোগিতা পাবে . (উল্লেখ্য: Training গুলো স্যার তার techbeeo software company'r পাশাপাশি পরিচালনা করে থাকেন।) কোর্স গুলো সম্পর্কে বিস্তারিত জানতে পারবেন এই লিংকে : Course Details .কোর্স গুলোর প্রত্যেকটির ফী নির্ধারণ করা হয়েছে ৩০,০০০ টাকা। আগ্রহীদেরকে অতিসত্বর মাসুদ আলম স্যার এর সাথে যোগাযোগ করার জন্য অনুরোধ করা যাচ্ছে। স্যার এর মোবাইল নম্বর : ০১৭২২ ৮১ ৭৫ ৯১

PHP Object Oriented Programming পর্ব-১২: PHP OOP Class Autoloading

PHP OOP তে class autoloading বিষয়টা কি?

PHP Class Autoloading

মূলত: আগে থেকেই কোনো class include না করে রেখেই class object তৈরী করা কালীন স্বয়ংক্রিয় ভাবে class load হওয়ার পদ্ধতিকে PHP তে class autoloading বলা হয়। অর্থাৎ, একজন PHP প্রোগ্রামার যেকোনো বড় Project Development কালীন একাধিক class library তৈরী করতে হয়। এবং Project Development এর সুবিধার্তে বিভিন্ন সময়ে ভিন্ন ভিন্ন class এর ভিন্ন ভিন্ন Object তৈরী করতে হয়। আর এর জন্য প্রত্যেকটি PHP class file কে include অথবা require function দিয়ে program বা code এর শুরুতে সংযুক্ত বা include করে রাখতে হয়, আর এতে একজন প্রোগ্রামার কে আগে থেকেই অনেক অপ্রয়োজনীয় class গুলো include করে রাখতে হয়, আর তাতে project এর performance সহ বিভিন্ন সমস্যা তৈরী হয়। আর এই সমস্যা সমাধানের জন্য PHP-5 থেকে class autoloading সুবিধা সংযুক্ত করা হয়েছে। class autoloading করার জন্য class এর নাম এবং class file এর নাম একই হতে হয়।

PHP OOP তে কিভাবে class autoload করা হয়?

PHP তে spl_autoload_register() function এর মাধ্যমে class autoload করা হয়। চলুন আরেকটু ভালো ভাবে ব্যাখ্যা করা যাক :

উদাহরণস্বরূপ, একটি Web Forum Application তৈরী করবেন, এবং Web Forum Application এর মধ্যে আপনি Member class এর জন্য Member.php নামে একটি ফাইল এবং topic class এর জন্য Topic.php নামে একটি ফাইল তৈরী করলেন। সাধারণত আপনি আপনার class file গুলো আপনার ওয়েব সার্ভারের কোনো folder এ রাখবেন ঠিক এইরকম।

classes/
 Member.php
 Topic.php

এখন আপনি যদি আপনার application এর জন্য Member class থেকে একটা object তৈরী করার দরকার হয় বা মনে করেন, তাহলে আপনাকে প্রথমে Member.php ক্লাস ফাইল অন্তর্ভুক্ত করতে হবে, তারপর object তৈরী করতে হবে ঠিক নিচের মত করে:

<?php
require_once( "classes/Member.php" );
$member = new Member();
?>

এখন একই page এ আপনি যদি আপনার application এর জন্য Topic class থেকে একটা object তৈরী করার দরকার হয় বা মনে করেন, তাহলে আপনাকে আবার Member.php class file এর মত Topic.php class file অন্তর্ভুক্ত করতে হবে, তারপর object তৈরী করতে হবে ঠিক নিচের মত করে:

<?php
require_once( "classes/Member.php" );
require_once( "classes/Topic.php" );
$member = new Member();
$member = new Topic();
?>

এখন যদি আমরা PHP Class Autoloading Feature টি ব্যবহার করি, তাহলে বার বার class file include করার প্রয়োজন পরবেনা, আর PHP class Autoloading Feature টি ব্যবহার করতে চাইলে আপনাকে প্রথমে একটি function তৈরী করতে হবে, ঠিক নিচের উদাহরণটির মত করে।

<?php
function loadClass($class_name) {
    include "Classes/$class_name.php";
}
?>

বিঃ দ্রঃ loadClass function এ include function এর মধ্যে class file পাথটি ঠিক আছে কিনা তা খেয়াল রাখবেন। পাথ ঠিক না থাকলে class autoload হবেনা।

বিঃ দ্রঃ function এর নাম loadClass হতে হবে এমন কোনো কথা নেই। আপনি যেকোনো নামই ব্যবহার করতে পারবেন।

এখন আমাদেরকে spl_autoload_register() function দিয়ে আমাদের loadClass() function কে autoload এর জন্য রেজিস্টার করে নিতে হবে। নিচের উদাহরণটি দেখুন :

<?php
function loadClass($class_name) {
    include "Classes/$class_name.php";
}
spl_autoload_register("loadClass");
?>

এবার আপনার কাজ শেষ , এখন যখনি আপনি যেকোনো class এর object তৈরী করবেন সাথে সাথে সেই class টি autoload হয়ে যাবে। নিচের উদাহরণটি দেখুন :

//File: class_autoload.php
<?php
function loadClass($class_name) {
    include "Classes/$class_name.php";
}

spl_autoload_register("loadClass");

new Member;
echo "<br>";
new Topic;
?>

Class Autoloading

বুঝার সুবিদার্থে আপনার Member.php এবং Topic.php File দুটিতে নিচের কোড গুলো লিখুন। তারপর class_autoload.php file টি execute করুন।

File: Member.php

<?php
class Member{
	public function __construct(){
		echo "Hello Member Class";
	}
}
?>

File:Topic.php

<?php
class Topic{
	public function __construct(){
		echo "Hello Topic Class";
	}
}
?>

Anonymous function দিয়ে class autoloading

spl_autoload_register() function এ আমরা কোনো function এর নাম ব্যবহারের পরিবর্তে Anonymous function ব্যবহার করতে পারি। নিচের উদাহরণ দেখুন :

<?php
spl_autoload_register(
		function ($className){
			include "Classes/$className.php";
		});

new Member;
echo "<br>";
new Topic;
?>

Class Autoloading এ exception handling এর ব্যবহার

অনেক সময় আমরা Object তৈরী করার সময় class এর নাম ভুল করে ফেলি, আর তাতে PHP engine আমাদের কিছু unexpected error দেখায় , এতে project security, Project Performance এ মারাত্মক সমস্যা সৃষ্টি করে, আর class Autoloading এর ক্ষেত্রে এই বিষয়টা আমরা খুব সহজে exception handling দিয়ে solve করতে পারি। নিচের উদাহরণটি দেখুন:

<?php
spl_autoload_register(function ($className){
	 if (file_exists("classes/$className.php")) { 
          require_once "classes/$className.php"; 
      } 
      else{
    throw new Exception("Unable to load $className Class.");
	}
});

try {
    new Member;
	echo "<br>";
	new NotExist;
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}

?>

Result

Hello Member Class
Unable to load NotExist Class.

ব্যাখ্যা: লাইন নম্বর ১২ এ আমাদের classes folder এর মধ্যে Member class থাকায় কোনো error দেখায় নাই। কিন্তু ১৪ নম্বর লাইনের NotExist class টি না থাকায় আমাদের custom error দেখাচ্ছে।

এই ক্যাটাগরির অন্যান্য পোস্ট:

Masud Alam
আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ৮ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। বিশেষ ভাবে বাংলাদেশের ১০০ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ৫২ জন ই আমার হাতে জেন্ড সার্টিফাইড হয়েছে। বর্তমানে TechBeeo Software Company তে সিইও হিসাবে আছি । পাশাপাশি w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -7 Engineering কোর্স করাই। আর w3programmers.com সাইট টি আমার।

Leave a Reply

Your email address will not be published. Required fields are marked *