Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Classi, ereditarietà delle variabili

    Ragazzi, ho scritto un semplicissimo codice di prova per vedere come funzionano le classi in PHP.

    Codice PHP:
    <?php
    Class Persona{
        private 
    $_nome;
        private 
    $_cognome;
        
        public function 
    __construct($nome,$cognome){
            
    $this->_nome=$nome;
            
    $this->_cognome=$cognome;
        }
        
        function 
    Stampa(){
            echo(
    "Persona: $this->_cognome $this->_nome");
        }
    }

    Class 
    RichPers extends Persona{
        private 
    $_titolo;

        function 
    __construct($nome,$cognome,$titolo){
            
    parent::__construct($nome,$cognome);
            
    $this->_titolo=$titolo;
        }
        
        function 
    Stampa(){
            echo(
    "Persona: $this->_titolo $this->_cognome $this->_nome");
        }
    }

    $persona=new RichPers("Nome","Cognome","Sig.");
    $persona->Stampa();
    ?>
    Io da questo codice mi aspetterei che a video ci sia scritto: Persona: Sig. Cognome Nome
    Invece c'è solo Persona: Sig.

    In cosa ho sbagliato?

    Le due variabili $_nome e $_cognome le ho impostate a private per non essere raggiungibili all'esterno, ma non è che così non sono raggiungibili neanche dalla classe che estende?

    Nel caso voglia utilizzare delle variabili non direttamente visibili dall'esterno ma visibili dalle classe che estendono che devo fare?

    Grazie

  2. #2
    Le due variabili $_nome e $_cognome le ho impostate a private per non essere raggiungibili all'esterno, ma non è che così non sono raggiungibili neanche dalla classe che estende?
    Devi usare protected

    Codice PHP:
    <?php 
    Class Persona
       protected 
    $_nome
       protected 
    $_cognome
         
        public function 
    __construct($nome,$cognome){ 
            
    $this->_nome=$nome
            
    $this->_cognome=$cognome
        } 
         
        function 
    Stampa(){ 
            echo(
    "Persona: $this->_cognome $this->_nome"); 
        } 


    Class 
    RichPers extends Persona
        private 
    $_titolo

        function 
    __construct($nome,$cognome,$titolo){ 
            
    parent::__construct($nome,$cognome); 
            
    $this->_titolo=$titolo
        } 
         
        function 
    Stampa(){ 
            echo(
    "Persona: $this->_titolo $this->_cognome $this->_nome"); 
        } 


    $persona=new RichPers("Nome","Cognome","Sig."); 
    $persona->Stampa(); 
    ?>
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    Eh, mi rispondo da solo

    Dunque, in altri linguaggi esiste un altro termine di visibilità oltre che private e public: protected.

    Ho fatto una prova a casaccio per vedere se PHP lo supportava e lo supporta!

    Quindi basta che cambio

    Codice PHP:
        private $_nome;
        private 
    $_cognome
    in

    Codice PHP:
        protected $_nome;
        protected 
    $_cognome
    ed il gioco è fatto.

    In questo modo evito che possa accedere direttamente a $persona->_nome o $persona->_cognome, ma al tempo stesso $_nome e $_cognome sono visibili alla classe RichPers.

  4. #4
    Devi usare protected
    Ecco, appunto :P

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.