उदाहरण # 2 http://php.net/manual/en/language.oop5.traits.php राज्योंPHP विशेषता: क्या यह सुनिश्चित करने का एक उचित तरीका है कि एक विशेषता का उपयोग कर वर्ग एक सुपर क्लास को बढ़ाता है जिसमें कुछ विधि शामिल है? पीएचपी पुस्तिका से
<?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();
?>
यह सही कोड है, लेकिन यह उस संदर्भ में parent::
उपयोग करने के लिए सुरक्षित नहीं है। जब तक मैं sayHello()
विधि कॉल
<?php
class MyOwnHelloWorld
{
use SayWorld;
}
?>
इस कोड को किसी भी त्रुटि का उत्पादन नहीं होगा: मान लीजिए कि मैं अपने ही 'हैलो दुनिया' वर्ग है जो किसी भी अन्य वर्गों के वारिस नहीं है लिखा करते हैं। ये गलत है।
दूसरी ओर यदि विशेषता को एक निश्चित विधि का उपयोग करने की आवश्यकता है, तो मैं इस विधि को सार के रूप में लिख सकता हूं, और यह अच्छा है क्योंकि यह सुनिश्चित करता है कि विशेषता का समय संकलन समय पर सही ढंग से उपयोग किया जाता है। लेकिन इस जनक वर्गों पर लागू नहीं होता:
<?php
trait SayWorld
{
public function sayHelloWorld()
{
$this->sayHello();
echo 'World!';
}
public abstract function sayHello(); // compile-time safety
}
तो मेरे सवाल है: (रन टाइम पर नहीं संकलन समय पर,) सुनिश्चित करने के लिए एक रास्ता है कि वर्ग जो एक निश्चित विशेषता का उपयोग करता parent::sayHello()
विधि होगा?
आप जो कर सकते हैं वह उस पद्धति का उपयोग करके वर्ग को मजबूर करने के लिए एक सार विधि जोड़ना है जिसकी आपको आवश्यकता है। इस तरह यह वर्ग पदानुक्रम से स्वतंत्र हो जाता है (लक्षणों के पीछे विचार: पी) – Jarry