Ukieweb

Diary

I write here what I learn

Code Mixin With PHP Traits

Code Mixin With PHP Traits

কেমন আছেন সবাই, বেশ কিছুদিন পরে আবার লিখতে বসেছি। আজকে ভাবলাম পিএইচপি’র Traits নিয়ে লিখবো। আমার কাছের অনেককেই দেখেছি Trait নিয়ে কনফিউজড। হয়তো ফ্রেমওয়ার্কের বদৌলতে এটি ব্যবহার করে থাকেন কিন্তু এর উপর স্পষ্ট ধারনা নেই। আসলে কোনো কিছুর গভীরে না জানলে সেটাকে সবসময় ম্যাজিক্যাল মনে হয় আর এর গুরুত্ব কম থাকে। আপনি যখন কোনো কিছুর কার্যপ্রনালীর নাড়িনক্ষত্র জানবেন তখন এর প্রতি ভালোলাগা, ভালোবাসা ও বিশ্বাস সবকিছুই বৃদ্ধি পাবে। তাই যতটুকু জানি সেটার বিস্তর জানা উচিত। যাইহোক অনেক জ্ঞানী কথাবার্তা বলেছি, কাজ না থাকলে যা হয় আরকি। তো চলুন জানি Traits কি, কেন ও কিভাবে।

Traits কি

সহজ ভাষায় বলতে গেলে Trait কে আপনি স্পেশাল class বলতে পারেন। Special কারন এই ক্লাসকে আপনি সরাসরি ব্যবহার করতে পারবেন না অর্থাৎ একে কোনো ক্লাসের অধিনে ব্যবহার করতে হবে। কিছুটা Abstract এর মতো। আর Trait কে অবশ্যই trait কিওয়ার্ড দিয়ে লিখতে হয়। Trait কে আপনি Mixins ও বলতে পারেন। কারন এর মাধ্যমে আপনি এক ক্লাসের ফাংশনালিটিজ অন্য ক্লাসের সাথে মিক্স করতে পারবেন। এখানে যে ক্লাসের সাথে Trait কে মিক্স করবেন সেই ক্লাস হবে Trait এর চাইল্ড ক্লাস। চলুন Trait কিভাবে লিখে দেখে নেই।

কেন Traits ব্যবহার করবেন

জানি উপরের কথা থেকে ব্যপারটা পরিষ্কার হয়নি যে trait কেন ব্যবহার করবেন। কোনোকিছু ব্যবহারের পূর্বে এর প্রয়োগ ও ব্যবহারের কারন জানাটা খুব জরুরী, এতে সঠিক কাজে সঠিক টুলস ব্যবহার করা যায় ও রিসোর্সের অপব্যবহার হয়না। ধরুন এমন অনেক সিচুয়েশন আসে যখন একজন প্রোগ্রামারকে মাল্টিপল ক্লাসকে ইনহেরিট করার দরকার পরে অর্থাৎ একটা ক্লাসে অন্য অনেকগুলো ক্লাসের ফাংশনালিটি মিক্সার করার দরকার পরে। কিন্তু PHP 5.3 পর্যন্ত এ কাজটি করা যেতো না। PHP 5.3 পর্যন্ত একটি ক্লাসের একটিই প্যারেন্ট ক্লাস থাকতে পারতো। কিন্তু সময়ের প্রয়োজনে ডেভলপারদের একটি ক্লাসের একাধিক প্যারেন্টের দরকার পরে তাই পিএইচপি’র টিম PHP 5.4 এ traits ব্যবহার নিয়ে এসেছে। এটি ছিলো পিএইচপির জন্য একটা রেভুলুশন। এরফলে পিএইচপিতে মাল্টিপল ইনহেরিটেন্সের জটিলতা কমে আসছে অর্থাৎ এখন একটি চাইল্ড ক্লাসের অনেকগুলো প্যারেন্ট ক্লাস থাকতে পারবে (একটু জারজ প্রকৃতির)। তাহলে একটু দেখে নেই আগে কি সমস্যার মুখোমুখি হতে হতো।

এখানে খেয়াল করুন Calculator ক্লাসটি কিন্তু সরাসরি SubSubMulDiv ক্লাসকে ব্যবহার করেনি। প্রথমে MulDiv ক্লাসটি SubSub কে ইনহেরিট করেছে পরে এটি আবার Calculator ইনহেরিট করেছে অর্থাৎ প্রতিটি ক্লাসের মাত্র একটিই প্যারেন্ট ক্লাস ছিলো কিন্তু যদি এরকমের আরো অনেকগুলো ক্লাসের বৈশিষ্ট্য নিয়ে Calculator কে কাজ করা লাগতো তাহলে আমরা কি করতাম? তখন আমাদেরকে একটি ক্লাসের একাধিক প্যারেন্ট ক্লাসের প্রয়োজনিয়তা চলে আসতো আর এ সমস্যাটারই trait সমাধান করেছে।

Trait কিভাবে কাজ করে

তো আমরা উপরে দেখেছি একটি চাইল্ড ক্লাসের একাধিক প্যারেন্ট ক্লাসকে নিয় কাজ করার জটিলতা। Trait যেহেতু এই সমস্যাটার সমাধান করেছে তাই চলুন একটু দেখে নেই উপরের সমস্যাটির সমাধান trait কিভাবে করে।

এখানে দেখুন কতো সহজে Calculator ক্লাসে SubSubMulDiv Trait দুটোকে ব্যবহার করেছি। এভাবে অনেকগুলো Trait কে একবারে ব্যবহার করা যাবে। অর্থাৎ অনকগুলো প্যারেন্ট মিলে একটা চাইল্ড তৈরী করবে। ফলে ঐ চাইল্ডে সবগুলো প্যারেন্টের বৈশিষ্ট্য চলে আসবে এবং কোড রিইউজ করা যাবে।

Trait ব্যবহারে চাইল্ড ক্লাস প্যারেন্টের ফাংশনালিটি ওভারল্যাপ করে। ফলে আপনি যদি প্যারেন্টে কোনো একটি মেথড লিখে থাকেন এবং চাইল্ডেও ও একই নামে মেথড থাকে তবে সেখানে চাইল্ড মেথডটি প্যারেন্টের মেথডকে ওভারল্যাপ করবে এবং ঐ মেথডটি কল করলে চাইল্ডের মেথডটিই কাজ করবে।

মনে রাখবেন trait কে কোনো চাইল্ড ক্লাসে ব্যবহারের পরে ঐ ক্লাসে trait এর সকল মেথড ও প্রোপার্টিজ $this ব্যবহার করে এক্সেস করতে পারবেন অর্থাৎ আমরা ইনহেরিট করলে যেভাবে ব্যবহার করি বা নিজ ক্লাসের মেথড বা প্রোপার্টিজকে যেভাবে ব্যবহার করি ঠিক তেমনি।

আরো মজার ব্যপার হচ্ছে আপনি trait এর ভিতরেও অন্য trait ব্যবহার করতে পারবেন

অনেকতো মজা পেলেন এবার আমার যাবার পালা। আমি এখানে চেষ্টা করেছি Traits এর বেসিক একটা ধারনা দেয়ার আর যারা Traits শুরু করবেন তাদের একটু পথ দেখাতে। আপনি যদি আরো বিস্তারিত জানতে চান Traits সম্পর্কে তাহলে নিচের লিংকগুলোতে গিয়ে একটু পড়াশুনা করুন।

http://alanstorm.com/php_traits/
http://php.net/manual/en/language.oop5.traits.php
http://culttt.com/2014/06/25/php-traits/
https://www.sitepoint.com/using-traits-in-php-5-4/
https://www.codecourse.com/forum/topics/php-traits

তো ভালো থাকবেন সবাই, আর দোয়া করবেন আমার জন্য :)

ধন্যবাদ :)

1 Comments

02/03/2017

ধন্যবাদ অনেক সহজে বোঝাগেল

To make a comment you have to login