Visualizzazione dei risultati da 1 a 7 su 7

Discussione: form check oop

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420

    form check oop

    Ciao a tutti;
    nell'ottica di studiare le dinamiche del php oop mi sono scopiazzato il form check di login presente nella guida php oop qui sul sito ma quando provo a lanciare la pagina mi da quest'errore:

    Fatal error: class FormCheck contains 1 abstract method and must therefore be decrlared abstract or implement the remaining methods (IFormCheck::setErrorMsg)

    Il codice è presente qui: http://www.html.it/pag/18366/comporr...a-prima-parte/
    Non ho idea di cosa voglia dire... praticamente ho fatto copia/incolla del codice in un'unica pagina... ho solo cambiato alcuni nomi, ma credo di aver rispettato la sintassi corretta...

  2. #2

    Re: form check oop

    Originariamente inviato da sitodue
    Ciao a tutti;
    nell'ottica di studiare le dinamiche del php oop mi sono scopiazzato il form check di login presente nella guida php oop qui sul sito ma quando provo a lanciare la pagina mi da quest'errore:

    Fatal error: class FormCheck contains 1 abstract method and must therefore be decrlared abstract or implement the remaining methods (IFormCheck::setErrorMsg)

    Il codice è presente qui: http://www.html.it/pag/18366/comporr...a-prima-parte/
    Non ho idea di cosa voglia dire... praticamente ho fatto copia/incolla del codice in un'unica pagina... ho solo cambiato alcuni nomi, ma credo di aver rispettato la sintassi corretta...
    Se oltre a fare il copia/incolla ti fossi degnato di leggere quello che c'è scritto nella guida (dato che è per questo che vengono scritte) ora sparesti cosa è una classe astratta e come essa va utilizzata e l'errore da te riportato ti risulterebbe assolutamente esplicativo!

    Studiare no copincollare!!!!!!!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Ciao,
    nella lezione 15 della guida ci sono scritte queste 2 regole che mi sembrano attinenti ma non riesco comunque a risolvere il problema...

    -Sintatticamente, per dichiarare una classe come astratta, la parola chiave class ed il nome della stessa devono essere precedute dalla keyword abstract;
    -Nota bene: se una classe contiene anche un solo metodo dichiarato come abstract, essa deve essere obbligatoriamente dichiarata come abstract, altrimenti verrà generato un Fatal Error (<-viceversa, non mi dice se una classe astratta debba contenere solo metodi dichiarati come astratti)

    Il codice della classe è questo:

    Codice PHP:
    abstract class AFormCheck implements IFormCheck {           
       public 
    $name;         
       public 
    $lastname;         
       public 
    $email;         
       public 
    $year;         
       public 
    $errorMsgs = array('name' => 'Il nome deve essere composto da caratteri alfanumerici e deve contenere dai 4 ai 10 caratteri al massimo.''lastname' => 'Il cognome deve essere composto da caratteri alfanumerici e deve contenere dai 4 ai 15 caratteri al massimo.''email' => 'L' e-mail deve essere composta nella seguente forma"mailname@mailserver.mailext"', 'year' => 'L'anno di nascita deve essere superiore al 1900'         );         

       private 
    $err '';         
       public 
    $clean = array();                   // costruttore         
       
    public function __construct() {                 
       
    $this->name $_POST['name'];                 
       
    $this->lastname $_POST['lastname'];                 
       
    $this->email $_POST['email'];                 
       
    $this->year $_POST['year'];         }              

       
    // metodi di tracking/erroring         
       
    protected function trackErrorMsg($field) {                 
          if(
    $this->errorMsgs[$field]) {                         
             
    $this->err .= "

    $this->errorMsgs[$field] . "</p>";                 
          }else{
             
    $this->internalError();                
          }         
       }                   
       protected function 
    getErrorMsg() {                 
          if(
    $this->err != '') {                         
             echo 
    "<h4>Errore!</h4>";                         
             echo 
    $this->err;                         
             return 
    false;                 
         }else {
             echo 
    "<h4>Ok!</h4>";                         
             echo 
    "

    Tutti i campi del form sono stati inviati correttamente.</p>"
    ;
             return 
    true;                 
         }         
       }                   
       protected function 
    internalError() {                 
          
    trigger_error('Non esiste un errore di questo tipo.'E_USER_WARNING);         
       } 

    Sicuramente sbaglio io qualcosa o tralascio qualcosa che per te è ovvio ma per me sconosciuto...
    Inoltre non è che voglio fare polemica, ma ad essere sincero, trovo questa guida di un'utilità pari a 0...
    27 lezioni di teoria generale sulla programmazione ad oggetti e 1 esempio completo (non funzionante) di codice php oop...
    Per chi vuole passare dal php procedurale all'oop secondo me ci sarebbe bisogno di molti più esempi concreti, almeno su quelle 5-6 tematiche di cui è pieno anche il forum (connessione db - invio email - form registrazione/login ecc) in modo da potersi rendere conto delle differenze di scrittura del codice, dell'utilità... dei vantiggi ecc...
    Non mi servono a niente 27 lezioni sulla definizione di incapsulamento, ereditarietà, polimorfismo e altri concetti che trovo in qualunque guida di qualunque linguaggio oop perchè se nessuno mi mostra il vantaggio di definire una classe li dove ero solito definire una funzione, continuerò a scrivere procedure...
    Imho ovviamente...

  4. #4
    Originariamente inviato da sitodue
    Ciao,
    nella lezione 15 della guida ci sono scritte queste 2 regole che mi sembrano attinenti

    Ma se ci sono due interi capitoli (16 e 17) dedicati esclusivamente alle classi astratte ed al loro utilizzo!

    INDICE

    Il problema non è risolvere l'errore che hai nel codice ma capire cos'è e come si utilizza una classe astratta.


    Originariamente inviato da sitodue
    Inoltre non è che voglio fare polemica, ma ad essere sincero, trovo questa guida di un'utilità pari a 0...
    27 lezioni di teoria generale sulla programmazione ad oggetti e 1 esempio completo (non funzionante) di codice php oop...
    Per chi vuole passare dal php procedurale all'oop secondo me ci sarebbe bisogno di molti più esempi concreti, almeno su quelle 5-6 tematiche di cui è pieno anche il forum (connessione db - invio email - form registrazione/login ecc) in modo da potersi rendere conto delle differenze di scrittura del codice, dell'utilità... dei vantiggi ecc...
    Non mi servono a niente 27 lezioni sulla definizione di incapsulamento, ereditarietà, polimorfismo e altri concetti che trovo in qualunque guida di qualunque linguaggio oop perchè se nessuno mi mostra il vantaggio di definire una classe li dove ero solito definire una funzione, continuerò a scrivere procedure...
    Imho ovviamente...

    Non si tratta di polemica, ma di un errato approccio da parte tua alla OOP. Come detto e ridetto l'OOP è esclusivamente un paradigma concettuale ed in quanto tale non è vincolato ad alcuno specifico linguaggio di programmazione. Bisogna imparare a ragionare ad oggetti, il codice è l'ultima cosa.
    Anche questo è stato già detto e ridetto, se vuoi davvero apprendere il paradigma OOP e comprenderne il funzionamente ed allo stesso tempo la vera utilità studia un buon manuale di UML.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it L'avatar di homerbit
    Registrato dal
    Dec 2005
    residenza
    Roma
    Messaggi
    1,380
    Originariamente inviato da satifal
    Ma se ci sono due interi capitoli (16 e 17) dedicati esclusivamente alle classi astratte ed al loro utilizzo!

    INDICE

    Il problema non è risolvere l'errore che hai nel codice ma capire cos'è e come si utilizza una classe astratta.
    cogito ergo sum
    If you think your users are idiots, only idiots will use it. DropBox

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Originariamente inviato da satifal
    Non si tratta di polemica, ma di un errato approccio da parte tua alla OOP. Come detto e ridetto l'OOP è esclusivamente un paradigma concettuale ed in quanto tale non è vincolato ad alcuno specifico linguaggio di programmazione. Bisogna imparare a ragionare ad oggetti, il codice è l'ultima cosa.
    Anche questo è stato già detto e ridetto, se vuoi davvero apprendere il paradigma OOP e comprenderne il funzionamente ed allo stesso tempo la vera utilità studia un buon manuale di UML.
    Ok, errore risolto! ...e proverò anche a seguire il consiglio sull'UML, anche se onestamente non credo che risolva il problema che ho esposto prima...
    Sarebbe come dire che il VHDL insegna a progettare componenti elettronici... Non è così.

  7. #7
    Originariamente inviato da sitodue
    Ok, errore risolto! ...e proverò anche a seguire il consiglio sull'UML, anche se onestamente non credo che risolva il problema che ho esposto prima...
    Sarebbe come dire che il VHDL insegna a progettare componenti elettronici... Non è così.
    Il mio è solo un consiglio poi sta a te decidere se seguirlo o meno, ma se vuoi apprendere il paradigma OOP devi ragionare in quel senso ed approcciarti in maniera molto differente allo sviluppo del codice e l'unica cosa che può davvero aiutarti è lo studio dell'UML evedrai che ti si aprirà un mondo.
    E' inutile che tu sappia cosa è una classe oppure un'istanza di essa se non apprendi il modo corretto di utilizzarla ed il modo di astrarre un problema in termini di oggetti coinvolti. Non faresti altro che prendere del codice procedurale, inserirlo in una classe e pensare di sviluppare codice OO quando in realtà non è così.
    "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.