incomprensione eridarietà e get_class_vars()

Salve a tutti,

  non riesco a capire una cosa: stro provando alcune cose nella programmazione ad oggetti. ho creato la seguente pagina:

<?php
class Pippo{
   protected $pensiero;
   protected $azione;
   
   public function __construct(){
      $this->pensiero="fame";
      $this->azione="mangia";
   }
   
   final public function mangia(){
        echo "noccioline<br >";
      $this->pensiero = "sazio";
      $this->azione = "riposo";
   }
}

class superPippo extends Pippo { 
   public function __construct(){
      parent::__construct();
   }
    
}

$yuk= new superPippo;

$yuk->mangia();

echo " la classe ". get_class($yuk) . " è figlia di ".get_parent_class($yuk) ."<br />";
print_r (get_class_vars(get_class($yuk)));
echo  "<br />";

?>

mi restituisce

noccioline

la classe superPippo è figlia di Pippo

Array ( )

solo mettendo gli attributi della Classe padre come pubblici, mi restituisce i metodi della classe...come mai?(perchè non è pubblico ok, ma che vantaggi si hanno?)

invece come mai viene eredtato il metodo mangia se è final?

Ciao

inviato 9 anni fa
cybaSsh
X 0 X

final non indica che non può essere ereditata ma solamente che non può essere dichiarata nuovamente (o estesa se preferisci); cioè è la versione finale di quel metodo.

Il vantaggio è che essendo protected non possono essere modificate dall'esterno, pensa se qualche altra classe potesse fare:

$yuk->pensiero = "suicidio";

$yuk->azione = "veleno";

risposto 9 anni fa
LonelyWolf
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda