PHP पॉलिमॉर्फिक कोड की अनुमति देता है जो अन्य भाषाओं में संकलन त्रुटि उत्पन्न करेगा। एक सरल यह दिखाता है। सबसे पहले सी ++ कोड है कि एक उम्मीद संकलन त्रुटि उत्पन्न:
class Base {};
class CommonDerivedBase {
public:
// The "= 0" makes the method and class abstract
// virtual means polymorphic method
virtual whoami() = 0;
};
class DerivedBase : public CommonDerivedBase {
public:
void whoami() { cout << "I am DerivedBase \n"; }
};
class Derived1 : public CommonDerivedBase {
public:
void whoami() { cout << "I am Derived1\n"; }
};
class Derived2 : public CommonDerivedBase {
public:
void whoami() { cout << "I am Derived2\n"; }
};
/* This will not compile */
void test_error(Base& db)
{
db.whoami();
}
C++ कम्पाइलर क्योंकि बेस एक विधि Whoami बुलाया नहीं है लाइन db.whoami()
error: no member named 'whoami' in 'Base'
के लिए यह त्रुटि संदेश जारी करेगा()। हालांकि, समान PHP कोड को रन टाइम तक ऐसी त्रुटियां नहीं मिलती हैं।
class Base {}
abstract class DerivedCommonBase {
abstract function whoami();
}
class Derived1 extends DerivedCommonBase {
public function whoami() { echo "I am Derived1\n"; }
}
class Derived2 extends DerivedCommonBase {
public function whoami() { echo "I am Derived2\n"; }
}
/* In PHP, test(Base $b) does not give a runtime error, as long as the object
* passed at run time derives from Base and implements whoami().
*/
function test(Base $b)
{
$b->whoami();
}
$b = new Base();
$d1 = new Derived1();
$d2 = new Derived2();
$a = array();
$a[] = $d1;
$a[] = $d2;
foreach($a as $x) {
echo test($x);
}
test($d1);
test($d2);
test($b); //<-- A run time error will result.
foreach पाश उत्पादन
I am Derived1
I am Derived2
साथ काम करता है नहीं जब तक आप परीक्षण ($ ख) कॉल करें और अपना एक रन समय त्रुटि प्राप्त होगी बेस का एक उदाहरण गुजरती हैं। तो foreach के बाद, उत्पादन
I am Derived1
I am Derived2
PHP Fatal error: Call to undefined method Base::whoami() in
home/kurt/public_html/spl/observer/test.php on line 22
केवल एक चीज आप PHP सुरक्षित परीक्षण करने के लिए एक रन समय जांच जोड़ने के लिए है, तो $ ख वर्ग का एक उदाहरण है किया जाएगा बनाने के लिए क्या कर सकते हैं के बारे में हो जाएगा आप इरादा
function test(Base $b)
{
if ($b instanceof DerivedCommonBase) {
$b->whoami();
}
}
लेकिन बहुरूपता के पूरे मुद्दे ऐसे रन टाइम चेकों को खत्म करने की है।
स्रोत
2014-02-25 01:14:42
"PHP बहुरूपता का समर्थन करता है, लेकिन इसमें कुछ सीमाएं हैं।" टाडा। :) –
धन्यवाद :) आपके उत्तर को ऊपर उठाया। –
यह प्रश्न भाषा अज्ञेयवादी क्यों है? मुझे पूरी तरह से PHP के बारे में लगता है। – beldaz