चूंकि केवल कुत्ते "fetch" खेल सकते हैं, क्या यह उदाहरण एक अच्छा या बुरा विचार है? मुझे संदेह है कि उदाहरण के उपयोग के कारण यह वास्तव में एक बुरा विचार है, लेकिन मुझे पूरा यकीन नहीं है कि क्यों।PHP उदाहरणों के साथ सामान्य पॉलिमॉर्फिज्म
class Animal {
var $name;
function __construct($name) {
$this->name = $name;
}
}
class Dog extends Animal {
function speak() {
return "Woof, woof!";
}
function playFetch() {
return 'getting the stick';
}
}
class Cat extends Animal {
function speak() {
return "Meow...";
}
}
$animals = array(new Dog('Skip'), new Cat('Snowball'));
foreach($animals as $animal) {
print $animal->name . " says: " . $animal->speak() . '<br>';
if ($animal instanceof Dog) echo $animal->playFetch();
}
एक और उदाहरण। चूंकि मैं लगातार डेटा ऑब्जेक्ट्स बना रहा हूं जिसमें एक आईडी है, मुझे लगा कि कोड कोड डुप्लिकेशंस से बचने के लिए मैं उन्हें बेस क्लास से भी बढ़ा सकता हूं। फिर, यह बुरा था? चूंकि एक अध्यक्ष के पास कोई नाम नहीं होता है और कुत्ते के पास पहियों नहीं होते हैं। लेकिन वे दोनों डेटा ऑब्जेक्ट्स हैं इसलिए यह बहुत भ्रमित है।
class Data_Object {
protected $_id;
function setId($id) {
$this->_id = $id;
}
function getId() {
return $this->_id;
}
}
class Dog extends Data_Object {
protected $_name;
function setName($name) {
$this->_name =
}
function getName() {
return $this->_name;
}
}
class Chair extends Data_Object {
protected $_numberOfWheels;
function setNumberOfWheels($number) {
$this->_numberOfWheels = $number;
}
function getNumberOfWheels() {
return $this->_numberOfWheels;
}
}
अनिवार्य रूप से मैं क्या सोचता मैं पूछ रहा हूँ है: "सभी उपवर्गों एक ही इंटरफ़ेस होना चाहिए या वे अलग-अलग हो सकती है?"
सुंदर यकीन है कि यह यहाँ कहा गया है इससे पहले कि बहुरूपता को संभालने के लिए है, लेकिन संक्षिप्त उत्तर यह ठीक है उपवर्गों एक अलग इंटरफेस के लिए के लिए है। – NullUserException
मुझे पूरा यकीन है कि पहला उदाहरण सशर्त तर्क के उदाहरण के उपयोग के कारण सही नहीं है। पॉलिमॉर्फिज्म का पूरा बिंदु यह नहीं है? – Dan
आप सभी जानवरों को एक प्रकार (कुत्ता) को छोड़कर कुछ (बोलने) क्यों करना चाहते हैं? दोषपूर्ण तर्क की तरह लगता है कि लूप में, वर्ग परिभाषा नहीं है। – NullUserException