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

Discussione: [PHP] Classi

  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    [PHP] Classi

    Ciao a tutti,
    Ho bisogno di rivolrgervi una domanda per chiarirmi un po le idee.
    Il mio problema è sulle classi e non riesco a capire determinati comportamenti perchè mi sembrano illogici.

    Es ho la mia class FPDF di php con tutti i suoi metodi e costruttori

    Ho aggiunto una extended class chiamata mypdf (che mi aiuta a costruire tabelle)

    Ora per poter richiamare i metodi della mia classe estesa devo dichiarare l'oggetto con
    $pdf = new MYPDF('P','mm','A4');
    cosa che prima
    $pdf = new FPDF('P','mm','A4');

    e fin qui ok.
    ma se io ho necessità di integrare infinite estensioni di classe come faccio ad avere tutti i miei metodi disponibili?!?

    mettiamo il caso che io costruisco una seconda estensione di classe chiamandola MYPDF2
    e dichiaro l'oggetto
    $pdf = new MYPDF('P','mm','A4');
    i metodi della classe MYPDF2 non riesco a richiamarli da quanto ho capito....

    non sarebbe piu logico dichiarare l'oggetto
    $pdf = new FPDF('P','mm','A4'); (classe padre)
    e che siano disponibili tutti i metodi delle classi estensioni.... questa non è la logica di ereditarietà (non so cosa ho appena detto)....

    aiutatemi a capire perchè ho una discreta esperienza in ambito procedurale (o meglio ho sempre risolto i problemi) ma quando si tratta di dover avere a che fare con le classi impazzisco
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    L'ereditarieta' funziona perche' i discendenti ereditano dai genitori, non sono i genitori che ereditano dai figli. Quindi se tu hai la classe "figlio" che estende la classe "padre", allora creando un'istanza di "figlio" avrai accesso sia ai metodi di "figlio" che a quelli di "padre". Se poi avrai la classe "nipote" che estende "figlio", allora con un'istanza di nipote avrai accesso ai metodi di tutta quanta la famiglia.

    Mi sembra piu' logico cosi' della "ereditarieta' al contrario"

  3. #3
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    ahhhhhhhhhhhhhh percui una ipotetica struttura sara questa

    class fpdf { }

    class MYPDF extends FPDF {}

    class MYPDF2 extends FPDF {} // sbagliato

    class MYPDF2 extends MYPDF {} // giusto


    e l'oggetto lop dove dichiarare

    $pdf = new MYPDF2('P','mm','A4'); //in questo modo avro tutti i metodi a mia disposizione

    Corretto?

    questa domanda mi è sorta perche sto scaricando 4 script da estendere alla classe fpdf e quello che non riesco a capire se questo è il metodo piu corretto per fare le cose...
    Che mestiere difficile.....essere da soli ancora di più

  4. #4

  5. #5
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    scusa se ti ripresento la domanda ma solo per essere sicuro all 100 %

    è il modo corretto di agiro oppure suggerisci di copiare brutalmente i metodi all'interno della classe principale e istanziare l'oggetto principale?

    Te lo chiedo perche l'ho provato e ho visto che funziona
    Che mestiere difficile.....essere da soli ancora di più

  6. #6
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    Originariamente inviato da Fractals87
    ahhhhhhhhhhhhhh percui una ipotetica struttura sara questa

    class fpdf { }

    class MYPDF extends FPDF {}

    class MYPDF2 extends FPDF {} // sbagliato

    class MYPDF2 extends MYPDF {} // giusto


    e l'oggetto lop dove dichiarare

    $pdf = new MYPDF2('P','mm','A4'); //in questo modo avro tutti i metodi a mia disposizione

    Corretto?

    questa domanda mi è sorta perche sto scaricando 4 script da estendere alla classe fpdf e quello che non riesco a capire se questo è il metodo piu corretto per fare le cose...
    Oddio...dipende dall'architettura dell'applicazione...estendere a catena potrebbe anche essere la cosa più sbagliata del mondo...quelle classi cosa rappresentano e che correlazione logica hanno tra di loro?

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  7. #7
    Dipende, le classi sono fatte per essere estese quindi non c'e' nulla di male nel farlo. Generalmente se usi una classe esterna (non fatta da te), oppure la classe e' affermata, ha una documentazione solida e via dicendo, meglio evitare di modificarla ed aggiungere funzionalita' con una classe figlia. Modificare la classe originale ha senso se devi aggiungere/sistemare le funzionalita' base (in modo da non influire sul codice che si affida al comportamento originale della classe), poi comunque varia da caso a caso.

  8. #8
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    ok allora vi indico la loro funzionalità cosi da fare chiarezza..

    class fpdf inutile spiegarlo.
    class code_39 extended server per la generazione di codici a barre.
    class table extended mi aiuto nella costruzione rapida delle tabelle
    class chart extended mi aiuto alla costruzioni di grafici.

    le classi funzionano tutte e correttamenete
    Che mestiere difficile.....essere da soli ancora di più

  9. #9
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    Originariamente inviato da Fractals87
    ok allora vi indico la loro funzionalità cosi da fare chiarezza..

    class fpdf inutile spiegarlo.
    class code_39 extended server per la generazione di codici a barre.
    class table extended mi aiuto nella costruzione rapida delle tabelle
    class chart extended mi aiuto alla costruzioni di grafici.

    le classi funzionano tutte e correttamenete
    e, dalle specifiche sintetiche che hai dato, no capisco perchè tu voglia estenderle...
    potersti fare qualcosa del genere

    Codice PHP:
    class MYPDF extends FPDF{

    $barCode null;
    $table null;
    $chart null;

      public 
    MYPDF(){
        
    $this->barCode = new code_39();
        
    $this->table = new table();
        
    $this->chart = new chart();
      }

    in modo da da accedere a tutti i metodi dall'interno della classe MYPDF, sempre che le altre classi ti servano per costruire il tuo PDF...qualcosa del genere insomma
    Codice PHP:
    $pdf = new MYPDF();
    $pdf->table->metodoClasseTable(); 
    ma ripeto, dipende dall'architettura dell'applicazione

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  10. #10
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    non è che voglio estenderle non sapevo proprio come fare a rendere tt i metodi disponibili ed era l'unico modo che avevo intuito..

    tornando alla tua soluzione mi sembra molto pratica me la spiegheresti un secondo...

    Sostanzialemente hai dichiarato una classe in estensione della fpdf con un solo metodo...

    le classi code_39, table, e chart come le dovo dichiarare?

    class code_39 extends MYFPDF{} ?
    Che mestiere difficile.....essere da soli ancora di più

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.