Ciao,
vorrei chiedervi un piccolo chiarimento circa le regole di visibilità:
Se dichiarao una variabile public: la vedo in qualunque posto nello script.
Se dichiaro una variabile private: la vedo solo dall'interno della classe dove l'ho dichiarata e per accedervi dall'eseterno devo per forza usare un metodo public dichiarato nella classe stessa.
Se dichiaro una variabile come protected la vedo e posso accedervi anche nelle sottoclassi...
Ok...ecco l'esempio che mi crea dei dubbi:
Ho una classe MyClass che al proprio interno contiene la variabile $name dichiarata come protected, allora $name sarà visibile dentro MyClass e dentro le sue sottoclassi.codice:<?php class MyClass{ protected $name = "Pippo"; private function getName() { echo $this->name; } } class MyOtherClass extends MyClass { // Estente la classe MyClass public function getName() { // aggiungendo un metodo echo "The name is " . $this->name; } } /* Funzione esterna alle classi che deve ricevere un oggetto istanza di MyClass */ function giveMeObj(MyClass $obj) { echo $obj->getName(); } $obj1 = new MyOtherClass(); // Creo un oggetto come istanza di MyOtherClass giveMeObj($obj1); // Lo posso passare comunque alla funzione perchè MyOtherClass estende MyClass ?>
Poi ho una sottoclasse MyOtherClass che estende MyClass aggiungendogli un metodo getName() che semplicemente restituisce il valore della variabile $name.
Se dichiaro la variabile $name come protected quando invoco la funzione esterna giveMeObj che a sua volta invoca il metodo getName di MyOtherClass mi viene restituito il valore di tale variabile.
Se invece dichiaro $name come private dentro MyClasse tale valore non mi viene restituito...
In pratica non mi viene restituito perchè se $name è dichiarata come private, la proprietà non viene ereditata dalla sottoclasse MyOtherClass che estende MyClass?
E' corretto il ragionamento?
Grazie
Andrea