Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Utente di HTML.it L'avatar di madquake
    Registrato dal
    Jun 2008
    residenza
    Manchester
    Messaggi
    85

    OOP | Definizione e uso delle interfacce

    Salve a tutti.
    Sono alle prime armi con PHP e sto cercando di imparare utilizzando manuali e tutorials.
    Ovviamente cerco di creare degli scriptini facili e stupidi che mi permettano di capire il funzionamento del codice ecc.

    Solitamente riesco a trovare gli errori in ciò che faccio [di solito si tratta di ";" dimenticati ecc.].
    Tuttavia in relazione alle interfacce non sono in grado di capire dove io stia sbagliando.

    Premetto che sono appassionato della serie "Misfits" e la utilizzo come pretesto per imparare l'OOP [catalogo i personaggi in base a nome, potere, colore degli occhi, ecc.].

    In questo caso vorrei creare una funzione che restituisca una stringa in cui il nome e il potere del personaggio [oggetto della classe] vari a seconda dei parametri inseriti, mentre la stringa di testo riporti se il personaggio sia un eroe o un cattivo.

    Credo sia più semplice postare la schifezza che ho fatto che descriverla.
    Ho cercato di commentare il testo.
    A mio discapito va il fatto che ho scritto il codice tutto da solo...

    ---



    <?php


    //Questo scriptino fa si che i caratteri accentatio vengano riconosciuti
    header('Content-type: text/html;charset=utf-8');




    //Dichiaro un'interfaccia "ruolo"
    interface role {
    abstract function ruolo();
    }


    //Genero la classe "misfits" i cui argomenti sono nome e potere
    class misfits {

    //Le proprietà della classe sono $name e $power
    private $name;
    private $power;

    public function __construct ($name, $power){
    $this->name = $name;
    $this->power = $power;
    print ("Ho appena creato un nuovo personaggio il cui nome è: $name");
    }
    }




    //Genero la sottoclasse "heroes" che implementa la funzione "ruolo" dell'interfaccia "role"
    class hero extends misfits implements role {

    public function ruolo(){
    return ($this->name . " è un eroe e il suo potere è: " . $this->power . "<br>");
    }

    }


    //Genero la sottoclasse "villains" che implementa la funzione "ruolo" dell'interfaccia "role"
    class villain extends misfits implements role {

    public function ruolo(){
    return ($this->name . " è un antagonista e il suo potere è: " . $this->power . "<br>");
    }

    }


    ?>


    <html>
    <head>
    <title>INTERFACCE</title>
    </head>
    <body bgcolor="#000000" text="#FFFFFF">

    <?php


    $samuel = new hero ("Samuel", "Invisibilità");
    print $samuel->ruolo();


    ?>

    </body>
    </html>



    ---

    Qualsiasi consiglio e suggerimento sarà piu che benvenuto!!!
    Grazie in anticipo per il vostro aiuto

  2. #2
    modifica il messaggio e usa i tag [ php] e [/ php] per rendere il codice leggibile.. poi vediamo
    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Utente di HTML.it L'avatar di madquake
    Registrato dal
    Jun 2008
    residenza
    Manchester
    Messaggi
    85
    In questo modo? è la prima volta che lo uso e forse ho fatto qualche cavolata...

    [ php]


    <?php



    //Questo scriptino fa si che i caratteri accentatio vengano riconosciuti
    header('Content-type: text/html;charset=utf-8');




    //Dichiaro un'interfaccia "ruolo"
    interface role {
    abstract function ruolo();
    }


    //Genero la classe "misfits" i cui argomenti sono nome e potere
    class misfits {

    //Le proprietà della classe sono $name e $power
    private $name;
    private $power;

    public function __construct ($name, $power){
    $this->name = $name;
    $this->power = $power;
    print ("Ho appena creato un nuovo personaggio il cui nome è: $name");
    }
    }




    //Genero la sottoclasse "heroes" che implementa la funzione "ruolo" dell'interfaccia "role"
    class hero extends misfits implements role {

    public function ruolo(){
    return ($this->name . " è un eroe e il suo potere è: " . $this->power . "<br>");
    }

    }


    //Genero la sottoclasse "villains" che implementa la funzione "ruolo" dell'interfaccia "role"
    class villain extends misfits implements role {

    public function ruolo(){
    return ($this->name . " è un antagonista e il suo potere è: " . $this->power . "<br>");
    }

    }


    ?>


    <html>
    <head>
    <title>INTERFACCE</title>
    </head>
    <body bgcolor="#000000" text="#FFFFFF">

    <?php


    $samuel = new hero ("Samuel", "Invisibilità");
    print $samuel->ruolo();


    ?>

    </body>
    </html>

    [/ php]



  4. #4
    Utente di HTML.it L'avatar di madquake
    Registrato dal
    Jun 2008
    residenza
    Manchester
    Messaggi
    85
    In questo modo? è la prima volta che lo uso e forse ho fatto qualche cavolata...

    Codice PHP:
    <?php
    //Questo scriptino fa si che i caratteri accentatio vengano riconosciuti
    header('Content-type: text/html;charset=utf-8');

    //Dichiaro un'interfaccia "ruolo"
    interface role {
        abstract function 
    ruolo();
    }

    //Genero la classe "misfits" i cui argomenti sono nome e potere
    class misfits {
        
    //Le proprietà della classe sono $name e $power
        
    private $name;
        private 
    $power;

        public function 
    __construct ($name$power){
            
    $this->name $name;
            
    $this->power $power;
            print (
    "Ho appena creato un nuovo personaggio il cui nome è: $name");
        }
    }

    //Genero la sottoclasse "heroes" che implementa la funzione "ruolo" dell'interfaccia "role"
    class hero extends misfits implements role {

        public function 
    ruolo(){
            return (
    $this->name " è un eroe e il suo potere è: " $this->power "<br>");
        }

    }

    //Genero la sottoclasse "villains" che implementa la funzione "ruolo" dell'interfaccia "role"
    class villain extends misfits implements role {

        public function 
    ruolo(){
            return (
    $this->name " è un antagonista e il suo potere è: " $this->power "<br>");
        }

    }
    ?>

    <html>
        <head>
            <title>INTERFACCE</title>
        </head>
        <body bgcolor="#000000" text="#FFFFFF">
            <?php
                $samuel 
    = new hero ("Samuel""Invisibilità");
                print 
    $samuel->ruolo();
            
    ?>
        </body>
    </html>
    Ultima modifica di Alhazred; 22-05-2014 a 11:48

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    [ php] e [/ php] senza gli spazi, ti sono stati indicati in questo modo perché altrimenti il forum li avrebbe interpretati come i veri tag e non li avresti potuti leggere.
    Per adesso ti modifico io il post.

  6. #6
    ehmmmm senza gli spazi.......


    Partiamo dall'inizio

    All methods declared in an interface must be public, this is the nature of an interface.
    http://www.php.net/manual/en/languag...interfaces.php

    Tutti i metodi di un'interfaccia devono essere pubblici

    Codice PHP:
    //Dichiaro un'interfaccia "ruolo"
    interface role {
         public function 
    ruolo();

    Questa volta, più che un voto.. è favoreggiamento.

  7. #7
    Utente di HTML.it L'avatar di madquake
    Registrato dal
    Jun 2008
    residenza
    Manchester
    Messaggi
    85
    Ops... sorry... non sono ancora molto pratico...

  8. #8
    Utente di HTML.it L'avatar di kingpin
    Registrato dal
    May 2014
    residenza
    London, UK
    Messaggi
    30
    Quote Originariamente inviata da Al_katraz984 Visualizza il messaggio
    ehmmmm senza gli spazi.......
    Partiamo dall'inizio
    1- La documentazione ufficiale è il tuo primo punto di approdo quando non sai qualcosa: http://www.php.net/manual/en/languag...interfaces.php
    2- Gli standard della community vanno seguiti. Sono importanti. Sono stati creati con cognizione di causa e ti serviranno un domani per lavorare in team (un team che adotta e segue gli standard "the right way"). Essi, inoltre, sono oggetto di valutazione durante le interview con le varie aziende (quelle serie). Perciò:
    2.1 - http://www.php-fig.org/
    2.2 - http://framework.zend.com/wiki/displ...ding+Standards
    2.3 - http://semver.org/ (può variare, lo includo per completezza)
    2.4 - http://www.phptherightway.com/
    2.5 - ..se mi viene in mente qualcos'altro in seguito te lo aggiungo..

    3- "Tutti i metodi di un'interfaccia devono essere pubblici" Al_katraz984
    4- Inviare comandi che causano "Side Effects" (header function) e poi creare elementi strutturali (classi, interfacce, ecc), NON SI FA. Se proprio vuoi mantenere tutto in un file (NON SI FA, ma sei nuovo e quindi può andare per ora o per "super fast tests") dichiara prima gli elementi strutturali e poi il resto.

    Cheers!

  9. #9
    Utente di HTML.it L'avatar di madquake
    Registrato dal
    Jun 2008
    residenza
    Manchester
    Messaggi
    85
    Quote Originariamente inviata da kingpin Visualizza il messaggio
    4- Inviare comandi che causano "Side Effects" (header function) e poi creare elementi strutturali (classi, interfacce, ecc), NON SI FA. Se proprio vuoi mantenere tutto in un file (NON SI FA, ma sei nuovo e quindi può andare per ora o per "super fast tests") dichiara prima gli elementi strutturali e poi il resto.
    Cheers!
    Ciao Kingpin, grazie per la risposta.
    Tuttavia non ho capito il quarto punto... I'm so sorry, ma sono veramente molto molto nuovo...

  10. #10
    Utente di HTML.it L'avatar di kingpin
    Registrato dal
    May 2014
    residenza
    London, UK
    Messaggi
    30
    Quote Originariamente inviata da madquake Visualizza il messaggio
    I'm so sorry, ma sono veramente molto molto nuovo...
    Non c'è problema. Tutti sono stati nuovi inizialmente.

    Ti riporto di seguito la definizione di Side Effect da php-fig PSR-1:

    The phrase "side effects" means execution of logic not directly related to declaring classes, functions, constants, etc., merely from including the file.

    "Side effects" include but are not limited to: generating output, explicit use of require or include, connecting to external services, modifying ini settings, emitting errors or exceptions, modifying global or static variables, reading from or writing to a file, and so on.

Tag per questa discussione

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.