Traits in php

Traits का प्रयोग करके हम ऐसे Free Methods Create कर सकते हैं,
जिन्हें एक से ज्यादा Classes में बिना Redefine किए हुए ज्यों का त्यों Member Methods की तरह Use कर सकते हैं।


यानी सामान्यतः ज्यादातर Classes में कुछ ऐसे Methods होते हैं, जो लगभग एक जैसा काम ही करते हैं।
 उदाहरण के लिए  Method सामान्यतः Class के Objects के Data को Set करने का काम करता है,
जबकि set() get() Method Class के Object के Data को Return करने का काम करता है।
इसी तरह से display()Method लगभग हर Class में Class के Object के Data को Display करने का ही काम करता है।


Traits को भी ठीक उसी तरह से Create किया जाता है, जिस तरह से हम Class Create करते हैं।
 अन्तर केवल इतना है कि Traits में हम केवल Methods को ही Define करते हैं Data Members को नहीं क्योंकि Traits में Define किए गए Methods को Directly Call नहीं किया जा सकता
 तथा हम किसी Trait का Direct Instance Create नहीं कर सकते, क्योंकि ये Class नहीं होते बल्कि Class के एक हिस्से के रूप में Use किए जाते हैं और Objects हमेंशा किसी न किसी Class के ही Create होते हैं।

इन्हें हमेंशा किसी ना किसी Class में use Keyword का प्रयोग करके Embed किया जाता है
 और Embed होने के बाद इन Traits में Defined Methods को केवल Class के Members के लिए ही Use किया जाता है।
हम एक Trait में एक से ज्यादा Functions को एक Group के रूप में Define करते हैं और जब भी हमें उस Group के Function की
जरूरत Method के रूप में अपनी Class में होती है, हम इन Traits को अपनी Class में Use कर लेते हैं व Methods की Functionalities को Class के Methods की तरह उपयोग में ले लेते हैं।
Traits का प्रयोग करके हम बिना Inheritance की प्रक्रिया को Use किए हुए Composition द्वारा Class को Extend
करने की सुविधा प्राप्त करते हैं। किसी Trait का Create करने के लिए हमें trait Keyword का प्रयोग करना होता है। इस Concept को समझने के लिए हम निम्न उदाहरण Program देखते हैं:



<?php
trait ezcReflectionReturnInfo {
    function getReturnType() { /*1*/ }
    function getReturnDescription() { /*2*/ }
}

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>



<?php
class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}

class MyHelloWorld extends Base {
    use SayWorld;
}

$o = new MyHelloWorld();
$o->sayHello();
?>

No comments:

Post a Comment

Pages