2010-10-24 7 views
6

नीचे कोड पर विचार करें:PHP में इंस्टेंस चर को ओवरराइड करना क्यों संभव है लेकिन जावा में नहीं?

<?php 

class Base { 
     protected $name = "Base"; 

     public function getName() { 
      return $this->name; 
     } 
} 

class Foo extends Base { 
     protected $name = "Foo"; 
} 

$f = new Foo(); 
echo $f->getName(); // output: Foo 

$b = new Base(); 
echo $b->getName(); // output: Base 

जैसे कि जावा अन्य भाषाओं आप उदाहरण चर ओवरराइड करने के लिए अनुमति नहीं दी जाएगी में के बाद से, लेकिन यह PHP में संभव है।

ऐसा इसलिए है क्योंकि PHP कमजोर प्रकार की भाषा है इसलिए यह संभव है?

उत्तर

12

नहीं, यह weak typing कोई लेना देना नहीं है।

मुझे लगता है कि यह केवल एक डिजाइन निर्णय था जिसे PHP डेवलपर्स ने लिया था। ऐसा इसलिए हो सकता है क्योंकि यह जावा की तुलना में एक स्क्रिप्टिंग भाषा है। (जावा में, आपको फ़ील्ड के लिए "वर्चुअल" लुकअप टेबल की आवश्यकता होगी या वैकल्पिक रूप से स्वचालित रूप से जेनरेटर/सेटर्स जेनरेट किए जाएंगे)।

+1

मैं वोट तो मैं आपका जवाब तक सामने लाना नहीं कर सकता से बाहर हूँ पढ़ा है, लेकिन यह केवल एक ही है कि दूर से क्यों PHP में की सवाल का जवाब देने के करीब है, सुपर क्लास इवर जावा एट में जबकि ओवरराइड की गई है अल, सुपरक्लास इवर छाया/छुपा हुआ है (और वे काफी समान नहीं हैं)। – BoltClock

-1

आपने इंस्टेंस वैरिएबल संरक्षित किया है, इसका मतलब है कि कक्षाएं विस्तारित करना इसे ओवरराइट कर सकता है। यदि आप उस उपयोग को निजी रूप से रोकना चाहते हैं।

http://www.php.net/manual/en/language.oop5.visibility.php

+0

-1: यह उत्तर नहीं देता कि कोई PHP में ऐसा क्यों कर सकता है, और जावा में ऐसा नहीं कर सकता है। – rsenna

+0

मैं सवाल पीछे की ओर – Galen

संबंधित मुद्दे