Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
🔴 Advanced  ·  Lesson 23

Traits

Traits किस समस्या को हल करते हैं

PHP में class सिर्फ़ एक parent extends कर सकती है। पर कभी दो असंबंधित classes को एक जैसे helper methods चाहिए — जैसे logging feature। इसे हर जगह copy-paste करना बुरा है। Trait इसे हल करता है: साझा methods एक बार define कीजिए, फिर use से किसी भी class में खींच लीजिए।

💡 Trait methods के दोबारा-इस्तेमाल-योग्य "mix-in" जैसा है जिसे आप किसी भी class में डाल सकते हैं।

Trait define करना

<?php
  trait Logger {
      public function log($msg) {
          return "LOG: " . $msg;
      }
  }
?>

Trait class जैसा दिखता है पर trait keyword इस्तेमाल करता है। इससे object नहीं बना सकते — यह सिर्फ़ असली classes में खींचे जाने को होता है।

Trait इस्तेमाल करना

<?php
  class Order {
      use Logger;   // trait की methods खींचना
  }
  $o = new Order();
  echo $o->log("Order placed");
?>
LOG: Order placed

use Logger; line trait की log() method को Order में copy कर देती है, जैसे वो वहीं लिखी हो। कोई भी class यही कर सकती है, बिना inheritance।

कई traits जोड़ना

Class एक साथ कई traits खींच सकती है।

<?php
  trait Logger    { public function log($m){ return "LOG: $m"; } }
  trait Timestamp { public function now(){ return "2026-01-01"; } }

  class Report {
      use Logger, Timestamp;
  }
  $r = new Report();
  echo $r->log("done") . " at " . $r->now();
?>
LOG: done at 2026-01-01

यहीं traits चमकते हैं — आप कई स्रोतों से abilities मिलाते हैं, जो single inheritance नहीं कर सकती।

Trait बनाम interface

बातTraitInterface
Code रखता है?हाँ (असली methods)नहीं (सिर्फ़ नाम)
उद्देश्यImplementation साझा करनाMethods मौजूद होना लागू करना
Keyworduseimplements

तैयार code साझा करने को trait; कुछ methods मौजूद होने की माँग को interface इस्तेमाल कीजिए। इन्हें अक्सर साथ इस्तेमाल किया जाता है।

आम गलतियाँ

  • Trait को instantiate करने की कोशिश। new Logger() नहीं कर सकते — traits classes के अंदर जाते हैं।
  • Method-नाम conflicts अनदेखा करना। एक जैसे method वाले दो traits को हल करने को insteadof/as चाहिए।
  • Traits का ज़्यादा इस्तेमाल। बहुत सारी mixed-in methods class को समझना मुश्किल करती हैं — इन्हें सोच-समझकर इस्तेमाल कीजिए।
  • Traits को interfaces समझना। Traits code रखते हैं; interfaces नहीं।

सारांश

  • Trait दोबारा-इस्तेमाल-योग्य method code है जिसे use से classes में खींचते हैं।
  • यह साझा code के लिए PHP की single-inheritance सीमा हल करता है।
  • Class एक साथ कई traits इस्तेमाल कर सकती है।
  • Traits असली code रखते हैं; interfaces सिर्फ़ method नाम।
  • एक-नाम method conflicts को insteadof/as से हल कीजिए।

आगे, method contracts लागू कीजिए abstract बनाम interface से, या classes दोहराइए PHP OOP में।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

PHP में trait क्या है?
Trait methods का एक समूह है जिसे आप कई classes में बिना inheritance दोबारा इस्तेमाल कर सकते हैं। methods एक बार trait में define कीजिए, फिर use keyword से किसी भी class में खींच लीजिए। यह असंबंधित classes में code दोबारा इस्तेमाल करने का PHP का जवाब है।
Inheritance होते हुए traits की ज़रूरत क्यों?
PHP class को सिर्फ़ एक parent extend करने देती है। अगर दो अलग स्रोतों से साझा code चाहिए, inheritance यह नहीं कर सकती। Traits इसे हल करते हैं, class को एक साथ कई traits से methods खींचने देकर।
Trait और interface में क्या अंतर है?
Trait में असली method code होता है जो class में copy हो जाता है। Interface सिर्फ़ method नाम रखता है, कोई code नहीं। implementation साझा करने को trait; methods मौजूद होने को लागू करने को interface इस्तेमाल कीजिए।
क्या class एक से ज़्यादा trait इस्तेमाल कर सकती है?
हाँ। Class एक साथ कई traits इस्तेमाल कर सकती है, उन्हें list करके: use TraitA, TraitB;। उनकी सारी methods उस class में उपलब्ध हो जाती हैं, जो अलग abilities मिलाने का साफ़ तरीका है।
अगर दो traits का method नाम एक हो तो क्या होता है?
यह conflict पैदा करता है, और PHP आपसे insteadof और as keywords से इसे हल करने को कहती है ताकि आप चुनें या rename करें कि कौन-सा method रखना है। यह चुपचाप, confusing overrides रोकता है।
← Back to PHP Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicAbstract Class vs Interface आपकी प्रगति: 23 / 50 (46%) · Lesson 24 / 50 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें