পরিচয়
পিএইচপি একাধিক উত্তরাধিকার সমর্থন করে না। এই সীমাবদ্ধতা কিছুটা হলেও বৈশিষ্ট্যের বৈশিষ্ট্য দ্বারা কাটিয়ে উঠতে পারে . এটি কোড পুনঃব্যবহারের একটি প্রক্রিয়া। বৈশিষ্ট্যের সংজ্ঞা শ্রেণী অনুরূপ। যাইহোক, এটি সরাসরি ইনস্ট্যান্ট করা যাবে না। পরিবর্তে, একটি বৈশিষ্ট্যের কার্যকারিতা ব্যবহার দ্বারা একটি শ্রেণিতে উপলব্ধ করা হয় কীওয়ার্ড সুতরাং, একটি শ্রেণী একটি বৈশিষ্ট্যে সংজ্ঞায়িত পদ্ধতিগুলি ব্যবহার করতে পারে বা এমনকি তাদের ওভাররাইড করতে পারে। এটি উত্তরাধিকারসূত্রে পাওয়া অন্য কোনো অভিভাবক শ্রেণীর ছাড়াও।
একটি বৈশিষ্ট্যও একটি ইন্টারফেসের অনুরূপ। পার্থক্য হল যে ইন্টারফেস এর ভিতরে পদ্ধতির সংজ্ঞা প্রদান করে না, যা অবশ্যই ক্লাস বাস্তবায়নের মাধ্যমে করা উচিত। বৈশিষ্ট্য পদ্ধতি অবশ্য সংজ্ঞা প্রদান করে, যা বৈশিষ্ট্য ব্যবহার করে এমন শ্রেণী দ্বারা ওভাররাইড করা যেতে পারে বা নাও হতে পারে।
সিনট্যাক্স
<?php trait testtrait{ public function test1(){ //body of method } } //using trait class testclass{ use testtrait //rest of members in class } ?>
উদাহরণ
নিম্নলিখিত কোডে, একটি ক্লাসে দুটি পদ্ধতি সহ একটি বৈশিষ্ট্য ব্যবহার করা হয় যা একটি পদ্ধতিকে ওভাররাইড করে
উদাহরণ
<?php //definition of trait trait testtrait{ public function test1(){ echo "test1 method in trait\n"; } public function test2(){ echo "test2 method in trait\n"; } } //using trait class testclass{ use testtrait; public function test1(){ echo "test1 method overridden\n"; } } $obj=new testclass(); $obj->test1(); $obj->test2(); ?>
আউটপুট
আউটপুট নিম্নরূপ -
test1 method overridden test2 method in trait
শিশু শ্রেণিতে বৈশিষ্ট্য
এটি বৈশিষ্ট্যের প্রধান সুবিধা। অভিভাবক সহ একটি শ্রেণিও একটি বৈশিষ্ট্য ব্যবহার করতে পারে এবং এটির পদ্ধতিকে ওভাররাইড করতে বেছে নিতে পারে। এইভাবে কার্যকরভাবে একাধিক উত্তরাধিকার অর্জন। এই বৈশিষ্ট্যের উদাহরণ নিচে দেওয়া হল -
উদাহরণ
<?php //definition of trait trait testtrait{ public function test1(){ echo "test1 method in trait\n"; } } //parent class class parentclass{ public function test2(){ echo "test2 method in parent\n"; } } //using trait and parent class class childclass extends parentclass{ use testtrait; public function test1(){ echo "parent method overridden\n"; } public function test2(){ echo "trait method overridden\n"; } } $obj=new childclass(); $obj->test1(); $obj->test2(); ?>
আউটপুট
উপরের কোড নিম্নলিখিত ফলাফল তৈরি করে -
parent method overridden trait method overridden
ইন্টারফেসের সাথে বৈশিষ্ট্য
একটি ক্লাস একটি ইন্টারফেস বাস্তবায়ন করা, অন্যান্য অভিভাবক শ্রেণী প্রসারিত করা এবং একই সময়ে বৈশিষ্ট্য ব্যবহার করা সম্ভব
উদাহরণ
<?php //definition of trait trait mytrait{ public function test1(){ echo "test1 method in trait1\n"; } } class myclass{ public function test2(){ echo "test2 method in parent class\n"; } } interface myinterface{ public function test3(); } //using trait and parent class class testclass extends myclass implements myinterface{ use mytrait; public function test3(){ echo "implementation of test3 method\n"; } } $obj=new testclass(); $obj->test1(); $obj->test2(); $obj->test3(); ?>
আউটপুট
এটি নিম্নলিখিত আউটপুট তৈরি করবে -
test1 method in trait1 test2 method in parent class implementation of test3 method
দ্বন্দ্বের সমাধান
যদি একটি ক্লাস একটি সাধারণ পদ্ধতির সাথে দুটি বৈশিষ্ট্য ব্যবহার করে, তবে তাদের দ্বন্দ্ব স্কোপ রেজোলিউশন অপারেটর এবং পরিবর্তে দ্বারা সমাধান করা হয় কীওয়ার্ড
উদাহরণ
<?php trait trait1{ public function test1(){ echo "test1 method in trait1\n"; } public function test2(){ echo "test2 method in trait1\n"; } } trait trait2{ public function test1(){ echo "test1 method in trait2\n"; } public function test2(){ echo "test2 method in trait2\n"; } } //using trait and parent class class testclass { use trait1, trait2{ trait1::test1 insteadof trait2; trait2::test2 insteadof trait1; } } $obj=new testclass(); $obj->test1(); $obj->test2(); ?>
আউটপুট
উপরের স্ক্রিপ্ট নিম্নলিখিত ফলাফল তৈরি করে
test1 method in trait1 test2 method in trait2