Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581

    Problema classe e sua estensione

    Ciao a tutti
    mi sto avvicinando all'OOP con php, ma ho unproblema con una classe estesa.

    In pratica ho scritto una classe con determinati metodi, ed una successiva classe che estende la prima dove ho ridefinito un solo metodo.

    Il problema è che l'oggetto di classe estesa, quando creato, sembra vada ad utilizzare il metodo della classe madre.

    Qualcuno mi può aiutare?
    il codice:
    Codice PHP:
    <?
    class Errori{
        
    // attributi
        
    public $testo_errore;
        
        
    // costruttore
        
    public function __construct(){
            
    $this->testo_errore "";
        }
            
        private function 
    genera($codice){

            switch((int)
    $codice){
                
    # UTENTI e AUTENTICAZIONI -> 01-100
                
    case 21:
                    
    $this->testo_errore "Autorizzazioni di accesso mancanti";
                    break;

                ... ...
            }
        }
            
        private function 
    generaTitolo($codice){
            switch((int)
    $codice){
                case 
    1:
                    
    $this->testo_errore "Accesso non consentito";
                    break;
                
    ecc ecc ....
            }
            
            ... ...
            
            return(
    $this->testo_errore);
        }
        
        public function 
    scriviDiv($parametri$login){
            ... ...
            
    # stampa del titolo
            
    print("\">" $this->generaTitolo((int)$arr_parametri[0], "") . "</span>\n");
            print(
    "<ul>\n");
            
            ... ...

            
    $arr_tmp_msg explode("$$"tmp_id_messaggio);
            print(
    "[*]" $this->genera((int)$arr_tmp_msg[1], $arr_tmp_msg[0]) . "\n");
    "\n");
            ... ...
        }
    }

    class 
    ErroriBO extends Errori{
        private function 
    genera($codice){

            switch((int)
    $codice){
                
    # UTENTI e AUTENTICAZIONI -> 01-100
                
    case 21:
                    
    $this->testo_errore "Autorizzazioni di accesso mancanti";
                    break;
                ... ...
            }

            return(
    $this->testo_errore);
        }
    }
    ?>
    In pratica, io creo un nuovo oggetto i tipo ErroriBO e gli aplico il metodo scrivi ... ma a quanto pare lo script resta nella classe Errori ... applicando il metodo scrivi di Errori ...

    Codice PHP:
    if ($mostra_div_messaggio){
        
    $div_messaggio = new erroriBO();
        
    $div_messaggio->scriviDiv($parametri_div_messaggiotrue);

    come posso risolvere?

  2. #2
    prova a togliere private dalla sub classe

  3. #3
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    non cambia nulla

    la logica delle due classi è questa:

    l'oggetto creatochiama il metodo scriviDIV(), che a sua volta chiama generaTitolo() e/o genera()

    genera(), per l'appunto, varia in base al tipo di oggetto ... in pratica ho creato questa classe per gestire disintamenti messaggi di errore lato parte pubblica rispetto alla parte privata dell'applicazione

  4. #4
    Non e' detto che la cosa risolva il tuo problema comunque prova a fare queste cose:
    nella classe che estende la classe madre dichiara il costruttore che invoca il costruttore
    della sua superclasse

    Codice PHP:
       function __construct() {
           
    parent::__construct(); 

    Dichiara come protected anziché private i metodi della classe madre che non ridefinisci ma che utilizzi nel metodo scriviDiv......i metodi private sono accessibili solo alla classe stessa e credo che per logica avresti dovuto ottenere un errore anziche' imbatterti in questo comportamento anomalo.....i metodi protected sono privati per tutti ma non per le classi che estendono e quindi dovrebbe fare al caso tuo.
    Nella vita c'e' sempre da imparare, c'e' chi impara a fare e chi impara ad aspettare.

  5. #5
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    ho fatto le modifiche che mi hai indicato ... ma siamo punto e a capo

    mi viene un dubbio ... nella classe che estende la madre devo ridefinire l'attributo e tutti i metodi che non implemento magari mettendoli come parent:: ???

  6. #6
    No, non ha nessun senso riscrivere per niente, altrimenti tutta la oop sarebbe quasi inutile.
    Nella vita c'e' sempre da imparare, c'e' chi impara a fare e chi impara ad aspettare.

  7. #7
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    prova a cambiare private cn public a tutti i metodi.
    Per gli Spartani e Sparta usa spartan Il mio github

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.