Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Classe estesa con stessa variabile

    Ciao a tutti, volevo provare a fare una cosa, non mi sono mai cimentato ad estendere classi, e questa è la prima volta...una domanda...se io estendo una classe che ho instanziato cosi:

    $K = new king();

    e poi ho una classe che chiamerò king2 che estende la classe king, devo dichiararla come:

    $K2 = new king2();

    cè un modo per far assumere la variabile $K e non $k2 anche alla classe king2?

  2. #2

    Re: Classe estesa con stessa variabile

    Originariamente inviato da giorda86
    Ciao a tutti, volevo provare a fare una cosa, non mi sono mai cimentato ad estendere classi, e questa è la prima volta...una domanda...se io estendo una classe che ho instanziato cosi:

    $K = new king();

    e poi ho una classe che chiamerò king2 che estende la classe king, devo dichiararla come:

    $K2 = new king2();

    cè un modo per far assumere la variabile $K e non $k2 anche alla classe king2?


    Mi sa che hai le idee MOLTO confuse, e non parlo di classi ma di programmazione base. Io ripartirei dal concetto di variabile piuttosto che da quello di istanza!!!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Non ho capito cosa vuoi fare.
    Vuoi associare a $K sia king che king2?
    Se è così: ovviamente no, puoi associare 2 numeri distinti ad una variabile semplice?
    SE $k fosse un array allora si, ma è una cosa un po' brutta da fare.

  4. #4
    giorda86, spero di aver capito il tuo problema!
    Come ti hanno spiegato sopra di me sarebbe impossibile istanziare due classi assegnando alla variabile di istanza il medesimo nome, non credi anche tu?

    Immagino che il tuo problema derivi dal fatto che vorresti utilizzare alcune funzioni della classe K2 nella tua K1, e stai cercando una soluzione per unificare le due cose, è corretto?

    In questo caso ti consiglio la seguente soluzione.

    CLASSE K1
    codice:
    <?php
    
    class k1 {
    
    public $k2 = null;
    
    public function __contruct($k2 = null) {
    
    $this->k2 = $k2;
    
    }
    }
    
    ?>
    PAGINA DI ISTANZA DELLE CLASSI
    codice:
    <?php
    
    require_once('k1.cass.php');
    require_once('k2.cass.php');
    
    $k2 = new k2();
    $k1 = new k1($k2);
    
    ?>
    Così facendo nella tua classe $k1 avrai a disposizione tutte le funzioni di K2 semplicemente richiamando la classe così come l'abbiamo definita in K1:

    $k1->k2->funzione();

    Ovviamente il processo può essere invertito, infatti solitamente è la classe principale che va ad "aggregarsi" alle secondarie e non vice versa. Quindi un ragionamento più corretto e pulito sarebbe istanziare K1, successivamente K2 e collegarci le funzioni della principale, cioè K1.

    Spero di esserti stato d'aiuto.
    Buon lavoro!

  5. #5
    Lasciando da parte la fantasiosa terminologia utilizzata, prova a rivedere il concetto di estensione keyword.extends.
    Una classe figlia eredita automaticamente le caratteristiche della classe padre, aggiungendone eventualmnte altre per cui se istanzi una classe figlia potrai utilizzare tutti i metodi della classe padre oltre a quelli della classe figlia.
    Se fai:

    Codice PHP:
    $k = new king2(); 
    Hai automaticamente accesso ai metodi pubblici della classe king2 ed a quelli della classe king!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Originariamente inviato da Luigi Pallucca
    ...
    Immagino che il tuo problema derivi dal fatto che vorresti utilizzare alcune funzioni della classe K2 nella tua K1, e stai cercando una soluzione per unificare le due cose, è corretto?
    ...
    Se così fosse, avrebbe sbagliato ad estendere la classe King, perché se un metodo deve usarlo anche lì dentro, tale metodo va lì e non nella classe estesa.

  7. #7
    Ci conviene aspettare giorda86 per capire cosa realmente intendesse fare!

  8. #8
    allora mi spiego meglio...

    mettiamo di avere


    Codice PHP:

    class king () {

    public function 
    test_king() {}

    }

    class 
    king2 extends king () {

    public function 
    test_king2() {}

    }

    $K = new king();

    $K2 = new king2(); 
    se voglio richiamare la funzione della prima classe devo fare

    $K->test_king();

    mentre se voglio richiamare la funzione della seconda classe devo fare:

    $K2->test_king2();

    io invece vorrei richiamare la second funzione cosi:

    $K->test_king2();

    tutto qui, si può fare?

  9. #9
    Originariamente inviato da giorda86
    allora mi spiego meglio...

    mettiamo di avere


    Codice PHP:

    class king () {

    public function 
    test_king() {}

    }

    class 
    king2 extends king () {

    public function 
    test_king2() {}

    }

    $K = new king();

    $K2 = new king2(); 
    se voglio richiamare la funzione della prima classe devo fare

    $K->test_king();

    mentre se voglio richiamare la funzione della seconda classe devo fare:

    $K2->test_king2();

    io invece vorrei richiamare la second funzione cosi:

    $K->test_king2();

    tutto qui, si può fare?

    e' sbagliato sia l'esempio riportato sia quello che vorresti farci... instanzi $K di tipo King e non puoi usare i metodi di King2 da King (a meno di non passare una instanza di King2 a King)

    qual'è il problema? che cosa devi fare?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  10. #10
    Originariamente inviato da giorda86
    allora mi spiego meglio...

    mettiamo di avere


    Codice PHP:

    class king () {

    public function 
    test_king() {}

    }

    class 
    king2 extends king () {

    public function 
    test_king2() {}

    }

    $K = new king();

    $K2 = new king2(); 
    se voglio richiamare la funzione della prima classe devo fare

    $K->test_king();

    mentre se voglio richiamare la funzione della seconda classe devo fare:

    $K2->test_king2();

    io invece vorrei richiamare la second funzione cosi:

    $K->test_king2();

    tutto qui, si può fare?
    Codice PHP:
    $K = new king2();
    $K->test_king();
    $K->test_king2(); 
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

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.