PHP Traits ( ট্রেইটস )

PHP OOP তে trait কি?

সাধারণত PHP কে বলা হয় Single Inheritance Language অর্থাৎ, PHP Language টি Multiple Inheritance াপোর্ট করেনা। আর Trait হচ্ছে PHP OOP তে Single Inheritance এর সীমাবদ্ধতা দূর করার এবং Multiple Inheritance ব্যবহার করার একটি নতুন concept . যা PHP 5.4 এ প্রথম ব্যবহার করা হয়। Trait অনেকটা class এর মতোই, Trait কে Define করা হয় ক্লাসের মত করেই trait কিওয়ার্ডটি ব্যবহার করে। তবে এর থেকে class এর মত object তৈরী করা যায়না। কিন্তু একাধিক trait এর property এবং Method গুলোকে একটি single class এর মধ্যে ব্যবহার করা যায়। এবার চলুন একটা উদাহরণের মাধ্যমে আরো ভালো ভাবে বুঝা যাক :

use কীওয়ার্ড ব্যবহার করে Trait কে ক্লাসে ব্যবহার করা হয়। চলুন trait ব্যবহার করে একটা উদাহরণ দেখা যাক :

ব্যাখ্যা: লক্ষ্য করুন foo নামক trait কে use keyword দিয়ে bar class এর মধ্যে ব্যবহার করি, আর এতে আমরা bar এর object দিয়ে খুব সহজে foo trait এর method এবং property গুলো ব্যবহারের সুযোগ পাই।

traits এবং class এর মধ্যে কার Precedence বা অগ্রাধিকার আগে?

কাজ করার ক্ষেত্রে অনেক সময় দেখা যায়, একই নামের function একই সাথে trait, parent class এবং child class এ পাওয়া যায়, তখন প্রথমে child class এর Method পাবে, তারপর trait এর মধ্যে method টি পাবে, তারপর parent class এর method টি পাবে। চলুন একটা উদাহরণের মাধ্যমে দেখা যাক :

Result:

hello from child class

এখন যদি আপনি child class এর sayHello() Method টি off অর্থাৎ comment দিয়ে hide করে রাখেন, তাহলে trt trait এর sayHello() Method execute হবে। চলুন একটা উদাহরণের মাধ্যমে দেখা যাক :

Result:

say hellow from trait

কিভাবে একটা class এ একাধিক trait ব্যবহার করা যায়?

একটা class এ একাধিক trait ব্যবহার করতে হলে class এর মধ্যে use keyword এর পর প্রতিটি trait কে একটির পর আরেকটি comma দিয়ে দিয়ে লিখতে হয়। চলুন একটা উদাহরণের মাধ্যমে দেখা যাক :

Result:

You're Logged in as Subscriber 
You're Logged in as Contributor
You're Logged in as Author.
You're Logged in as Administrator
Members Login...done

PHP OOP তে trait এর Conflict Resolution কি?

অনেক সময়, যদি একটি class এ একাধিক trait ব্যবহার করে এবং এবং একাধিক class এ trait এ যদি একই নামে Method থাকে, আপনি যদি একাধিক trait ই একটি class এ ব্যবহার করেন তবে এটি আপনাকে fatal error দেখাবে। আর এই ব্যাপারটিকে বলা হয় Conflict Resolution. আর আমরা যদি insteadof operator দিয়ে compiler কে বলে দেন, যে একই নামের একাধিক Method এর মধ্যে কোন Method টি ব্যবহার হবে,অথবা method গুলোকে alias করে নেই , তাহলে আর কোনো error দেখাবেনা। চলুন একটা উদাহরণের মাধ্যমে দেখা যাক :

Result:

From Foo Trait

ব্যাখ্যা: মূলতঃ আমরা ১৯ নম্বর লাইনে বলে দিয়াছি , এখানে Foo trait এর first_function টি ব্যবহৃত হোক, trait Bar এর টা নয়।

এবার চলুন aliasing ব্যবহার করে একটা উদাহরণ দেখা যাক :

ব্যাখ্যা: মূলতঃ আমরা ১৯ নম্বর লাইনে বলে দিয়াছি , এখানে Foo trait এর first_function টি ব্যবহৃত হোক, trait Bar এর টা নয়। আবার ২২ নম্বর লাইনে আমরা Bar trait এর first_function টিকে aliasing করে second_function নাম দিয়েছি।

Class এর মধ্যে ব্যবহৃত Trait এর method গুলোর default visibility পরিবর্তনের উপায় কি?

সাধারণত class এর মতো trait এর method গুলোর visibility public, private এবং protected ঘোষণা করা যায়, তখন আপনি চাইল trait এর মধ্যের Method গুলোকে class এর মধ্যে as কীওয়ার্ড দিয়ে পরিবর্তন করতে পারবেন। নিচের উদাহরণটি দেখুন :

trait এর মধ্যে একাধিক trait এর ব্যবহার:

use কীওয়ার্ড ব্যবহার করে আমরা একটি trait এর মধ্যে একাধিক trait এর ব্যবহার করতে পারি। নিচের উদাহরণটি দেখুন :

ব্যাখ্যা: লাইন নম্বর ১৫ তে লক্ষ করুন , ট্রেইট HelloWorld এ আমরা Hello এবং World নামে দুটি trait ব্যবহার করেছি।

traits এর মধ্যের properties গুলোকে class এ ব্যবহার :

কোনো trait কে class এর মধ্যে ব্যবহার করার পর , trait এ অবস্থিত একই নামের property কে class এ define করা যায়না, তারপর ও যদি কেও trait এ অবস্থিত একই নামের property কে class এ define করে , সেক্ষেত্রে যদি property value যদি same হয় তাহলে PHP কোনো error বা warning দেখাবেনা , আর যদি value ও same না হয় , তাহলে PHP Fatal Error দেখাবে। নিচের উদাহরণটি দেখুন :

Result:

105

এবার আমরা ভিন্ন value দিয়ে check করব।

Output:

Fatal error: Cookbook and Calories define the same property ($cake) in the composition of Cookbook. However, the definition differs and is considered incompatible. Class was composed in [...][...] on line 8

ব্যাখ্যা: লক্ষ্য করুন , লাইন নম্বর ১০ এ আমরা $cake এর 300 এর পরিবর্তে 400 দিয়েছি, যার দরুন PHP আমাদের কে fatal error দেখাচ্ছে।

Trait এর মধ্যে static Property এবং Method এর ব্যবহার :

PHP তে Trait এর মধ্যে static Property এবং Method দুটিই support করে। নিচের উদাহরণটি দেখুন :

Trait এর মধ্যে abstract Method এর ব্যবহার :

আপনি চাইলে Trait এ abstract Method ঘোষণা করতে পারেন। আর যদি কোনো trait এ abstract Method থাকে, তখন abstract Method যুক্ত trait টি যেই class এ ব্যবহৃত হবে, সেই ক্লাস এ অবশ্যই abstract Method টি body সহ পুনরায় ঘোষণা করতে হবে। নিচের উদাহরণটি দেখুন :

Result:

Hi there Awesome Man !

Trait ব্যবহার করে একটা sorting উদাহরণ :

Output:

Originally published on November 18, 2017 at w3programmers[dot]com

The Invisible Man | Machine Learning Engineer, Programmer, Tech Enthusiast

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store