Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    residenza
    http://www.okkioalprezzo.com/it/
    Messaggi
    206

    Domanda su eredita classi..

    Ciao a tutti!! ho una domanda da fare per quanto riguarda l'eredità delle classi in php...

    allora io ho tre classi:
    1) Classe A
    Codice PHP:
    class A
    {
        public 
    $a;
        
    //.......
        
        
    public function __condtruct()
        {
            
    //......
        
    }
        
        public function 
    fun_class_A()
        {
            echo
    "Ciao html.it";
        }
        

    2) la classe B richiama la classe A in questo modo:
    Codice PHP:
    class B
    {
        public 
    $obj;
        public 
    $obj1;
        
    //.... ecc
        
        
    public function __construct()
        {
                
    //....
                
        
    }

             public function 
    func_classeB()
             {
                   
    $this->obj = new  A();
             }

    3) la classe C estende la classe B in questo modo:
    Codice PHP:
    class extends B
    {
        public 
    $ob;
        public 
    $ob;
        
    //.... ecc
        
        
    public function __construct()
        {
            
    /*
                Chiamo la proprietà $this->obj che viene ereditata dalla classe B e successivamente
                chiamo il metodo function fun_class_A();
            */
            
    $this->obj->fun_class_A();
        }

    Teoricamente il metodo $this->obj->_fun_class_A(); che chiamo nella classe C che però è ereditato dalla classe B mi dovrebbe stampare : Ciao html.it o sbaglio??


    nel video viene stampata questo:
    Fatal error: Call to a member function _run() on a non-object

  2. #2
    Quando crei un'istanza di una classe, non viene chiamato anche il costruttore della classe padre, devi farlo manualmente:

    Codice PHP:
    class extends B
    {
        public 
    $ob;
        public 
    $ob;
        
    //.... ecc
        
        
    public function __construct()
        {
            
    parent::__construct();
            
    /*
                Chiamo la proprietà $this->obj che viene ereditata dalla classe B e successivamente
                chiamo il metodo function fun_class_A();
            */
            
    $this->obj->fun_class_A();
        }


  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2005
    residenza
    http://www.okkioalprezzo.com/it/
    Messaggi
    206
    ok fino quì ci sono... ma se io non voglio chiamare il costruttore della classe estenza ma solo un metodo??

  4. #4
    Codice PHP:
    <?php
    class {

        public function 
    methodA() {
            echo 
    "Class A";
        }

    }

    class 
    extends {

        public function 
    methodB() {
            echo 
    $this->methodA();
        }

    }

    $b = new B();
    $b->methodB();
    ?>
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Originariamente inviato da felixaf21
    ok fino quì ci sono... ma se io non voglio chiamare il costruttore della classe estenza ma solo un metodo??
    Quello lo puoi fare tranquillamente, il problema del tuo codice e' che la creazione dell'oggetto A stava nel costruttore di B, quindi se non chiami il costruttore di B $this->obj non contiene un oggetto.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2005
    residenza
    http://www.okkioalprezzo.com/it/
    Messaggi
    206
    si questo è vero! infatti ho cambiato l'esempio nel primo post!!!
    adesso ho creato un'altra funzione nella classe A.....

    Il mio problema è questo: nella classe B richiamo la classe A tramite la proprietà
    $this->obj = new A(), in modo tale da accedere a tutte le proprietà e metodi pubblici della classe A.

    successivamente estendo la classe B con la C ciò significa che la classe C eredita la dalla Classe B. quindi dalla classe C posso richiamare $this->obj la quale dovrebbe richiamare a sua volta tutti i metodi e proprietà della classe A..... o sbaglio??
    Se dovesse essere così perchè mi da questo errore:


    Fatal error: Call to a member function _run() on a non-object

  7. #7
    Allora innanzitutto il codice che hai postato e' molto confuso, hai scritto "condruct" invece di "construct", hai dichiarato due volte "public $ob" che peraltro in quegli snippet non usi... per postare una domanda chiara devi postare codice corretto, ordinato e solo le parti necessarie a capire il problema.

    Originariamente inviato da felixaf21
    si questo è vero! infatti ho cambiato l'esempio nel primo post!!!
    adesso ho creato un'altra funzione nella classe A.....
    Che pero' non chiami da nessuna parte o sbaglio?


    Originariamente inviato da felixaf21
    Il mio problema è questo: nella classe B richiamo la classe A tramite la proprietà
    $this->obj = new A(), in modo tale da accedere a tutte le proprietà e metodi pubblici della classe A.
    Come detto, la funzione "func_classeB()" non la chiami da nessuna parte, ma comunque perche' non estendere A se questo e' quello che ti serve?

    Originariamente inviato da felixaf21
    successivamente estendo la classe B con la C ciò significa che la classe C eredita la dalla Classe B. quindi dalla classe C posso richiamare $this->obj la quale dovrebbe richiamare a sua volta tutti i metodi e proprietà della classe A..... o sbaglio??
    Se dovesse essere così perchè mi da questo errore:


    Fatal error: Call to a member function _run() on a non-object
    Boh il metodo _run() non e' neanche presente nel codice che hai postato...

  8. #8
    Magari cerca di usare dei nomi con un senso, con tutti sti classe A, B, C, fun, func, methodA, methodB, ecc. non si capisce niente. Se hai un problema concreto, fai un esempio concreto. Se scrivi davvero codice cosi', auguri

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2005
    residenza
    http://www.okkioalprezzo.com/it/
    Messaggi
    206
    l'esempio che ho usato nel primo post non è il vero snippet di codice(troppe righe)... ho cercato di sintetizare al massimo il problema che ho incontrato, però ho fatto un sacco di casino!!!


    Riepilogando: io ho tre classi A-B-C, dalla classe B richiamo la classe A ossia istanzio un oggetto di tipo A. successivamente dichiaro la classe C come classe che eredita da B.

    nello snippet di codice si vede l'esempio:

    Codice PHP:
    class A
    {
        public 
    $A_attr1;
        
    //.......
        
        
    public function __construct()
        {
            
    // codice omesso
        
    }
        
        public function 
    uno_A()
        {
            echo
    "Ciao html.it";
        }
        
    }



    class 
    B
    {
        public 
    $B_attr1;
        public 
    $B_attr2;
        
    //.... ecc
        
        
    public function __construct()
        {
            
    // codice omesso
                
        
    }
        
        
        public function 
    due_B()
        {
            
    // instanzio la classe A,
            
    $this->B_attr2 = new A();
        }
    }



    class 
    extends B
    {
        public 
    $C_attr1;
        public 
    $C_attr2;
        
    //.... ecc
        
        
    public function __construct()
        {
           
    /**
            *  richiamo $this->B_attr2 della classe B che a sua volta punta al metodo uno_A_() della
            *  classe A.
            */
            
    $this->B_attr2->uno_A();
        }

    A questo punto mi dovrebbe stampare a video : Ciao html.it, mentre stampa il seguente errore:

    Fatal error: Call to a member function uno_A() on a non-object in

  10. #10
    Si ma sto metodo due_B() se non lo chiami non verra' eseguito, ti pare?

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.