2010-10-24 12 views
6

Si consideri il codice qui sotto:Perché è possibile sovrascrivere le variabili di istanza in PHP ma non in Java?

<?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 

Dal momento che in altri linguaggi come Java, non vi permetterà di ignorare la variabile di istanza, ma è possibile in PHP.

È perché poiché PHP è un linguaggio di tipo debole, quindi è possibile?

risposta

12

No, non ha nulla a che fare con weak typing.

Immagino che questa sia stata solo una decisione progettuale presa dagli sviluppatori di PHP. Può essere perché è più un linguaggio di scripting che Java. (In Java, è necessario disporre di una tabella di ricerca "virtuale" per i campi che supportano questo o, in alternativa, generatori/setter generati automaticamente).

+1

Ho perso i voti quindi non riesco a trovare la risposta, ma questo è l'unico che è lontanamente vicino a rispondere alla domanda sul perché in PHP, la superclasse ivar è sovrascritta mentre in Java e al, la superclasse ivar è ombreggiata/nascosta (e non sono esattamente la stessa cosa). – BoltClock

-1

Hai reso protetta la variabile di istanza, questo significa che l'estensione delle classi può sovrascriverlo. Se vuoi impedire che usi privato.

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

+0

-1: questo non risponde perché è possibile farlo in PHP e non è possibile farlo in Java. – rsenna

+0

ho letto la domanda all'indietro – Galen

Problemi correlati