Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 24
  1. #11
    Utente di HTML.it L'avatar di madquake
    Registrato dal
    Jun 2008
    residenza
    Manchester
    Messaggi
    85
    OK... ora mi è piu chiaro!

    Ci stavo lavorando proprio ora... Lo scriptino funziona se dichiaro "public" ciò che sta nell'interfaccia... tuttavia non so per quale motivo non mi visualizza il potere, ma solo il nome

    Ciò che sta nel costruttore funziona, ma le funzioni non mi restituiscono gli argomenti della classe.

    Ti riposto ilò codice come lo ho modificato:

    Codice PHP:

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

    //Dichiaro un'interfaccia "ruolo"interface role {    public function ruolo();}
    //Genero la classe "misfits" i cui argomenti sono nome e potereclass 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<br>");    }}

    //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><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><br>");    }    }
    ?>
    <html>    <head>        <title>INTERFACCE</title>    </head>    <body bgcolor="#000000" text="#FFFFFF">        <?php
    $samuel 
    = new hero ("Samuel""Invisibilità");print $samuel->ruolo();
    $nathan = new hero ("Nathan""Immortalità");print $samuel->ruolo();
    $samuel = new villain ("Brian""Milkchinesis");print $samuel->ruolo();
    ?>            </body></html>

  2. #12
    Utente di HTML.it L'avatar di madquake
    Registrato dal
    Jun 2008
    residenza
    Manchester
    Messaggi
    85
    Ciao ho capito finalmente l'erroraccio che avevo fatto...
    Avevo definito gli argomenti come "private", ma siccome le dichiaravo nella classe ma le richiamavo nella sottoclasse queste non venivano viste...

    Ecco il codice "finale" [ho anche imparato ad uasare i tag ]

    Codice PHP:
    <?php

    header
    ('Content-type: text/html;charset=utf-8');


    interface 
    role {    
    public function 
    ruolo();
    }

    class 
    misfits {    
    protected 
    $name;    
    protected 
    $power;        

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


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

    class 
    villain extends misfits implements role {        
    public function 
    ruolo(){    
    return (
    $this->name " è un antagonista e il suo potere è: " $this->power "<br><br>");    
    }    
    }
    ?>
    codice HTML:
    <html>    <head>        <title>INTERFACCE</title>    </head>    <body bgcolor="#AABB00" text="#FFFFFF">
    Codice PHP:
    <?php
    $samuel 
    = new hero ("Samuel""Invisibilità");print $samuel->ruolo();
    $nathan = new hero ("Nathan""Immortalità");print $samuel->ruolo();
    $samuel = new villain ("Brian""Milkchinesis");print $samuel->ruolo();
    ?>
    codice HTML:
        </body></html>

  3. #13
    Utente di HTML.it L'avatar di madquake
    Registrato dal
    Jun 2008
    residenza
    Manchester
    Messaggi
    85
    Scusate se continuo la discussione ma sono arrivato al capitolo Classi Astratte e ho di nuovo combinato un casino

    Posso chiedere a voi che ne sapete piu di me di dare un'occhiata la codice per vedere quale cavolata io abbia fatto?
    Mi sembra sia abbastanza simile alle interfacce ma non capisco come mai non funzioni nulla

    Codice PHP:
    <?php
    abstract class misfits {    
    protected abstract 
    $name;    
    protected abstract 
    $power;        

    public abstract function 
    __construct($name$power){        
    $this->name $name;        
    $this->power $power;        
    print (
    "Abbiamo creato " $name " un eroe<br>")    
    }       

    public abstract function 
    role();
    }

    class 
    hero extends misfits{        
    public function 
    __construct($name$power){        
    $this->name $name;        
    $this->power $power;        
    print (
    "Abbiamo creato " $name " un eroe<br>")    
    }        

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

    class 
    villain extends misfits{        
    public function 
    __construct($name$power){        
    $this->name $name;        
    $this->power $power;        
    print (
    "Abbiamo creato " $name " un antagonista<br>")    
    }        

    public function 
    role(){        
    return (
    $this->name " è un antagonista e il suo potere è: " $this->power "<br><br>");    
    }
    }
    ?>
    codice HTML:
    <html>    <head>        <title>CLASSI ASTRATTE</title>    </head>    <body bgcolor="#AABB00" text="#FFFFFF">
    Codice PHP:
    <?php
    $samuel 
    = new hero ("Samuel""Invisibilità");print $samuel->role();
    $nathan = new hero ("Nathan""Immortalità");print $samuel->role();
    $brian = new villain ("Brian""Milkchinesis");print $brian->role();
    ?>
    codice HTML:
        </body></html>

  4. #14
    Ciao

    Codice PHP:
    abstract class misfits {    
        protected 
    $name;    
        protected 
    $power;        

        public abstract function 
    __construct($name$power){        
            
    $this->name $name;        
            
    $this->power $power;        
            print (
    "Abbiamo creato " $name " un eroe<br>")    
        }

    le proprietà della classe non devono essere abstract
    Questa volta, più che un voto.. è favoreggiamento.

  5. #15
    Ciao,

    aggiungo, la parola chiave abstract indica solo quei metodi che devono essere reimplementati nelle classi che ereditano. I metodi che hanno gia un'implementazione di base non serve dichiararli abstract (ad es. il costruttore non ha senso dichiararlo abstract).
    Codice PHP:
    abstract class MiaClasseAstratta{
        function 
    __construct(){ /* costruttore */ }

        public function 
    mioMetodo(){
              
    /* Io faccio qualcosa non ho bisogno di essere definito abstract */
        
    }

        
    // In questo caso questo metodo deve essere implementato nelle classi che ereditano questa classe astratta
        
    public abstract function mioMetodoAstratto();

    http://www.morialberto.it

  6. #16
    Utente di HTML.it L'avatar di madquake
    Registrato dal
    Jun 2008
    residenza
    Manchester
    Messaggi
    85
    Nulla anche così mi da schermo bianco [in realtà il testo è bianco e lo schermo verde, visto che ho cambiato il bgcolor del tag body...]. Credo che l'errore sia ancora nella definizione delle classi...


    Codice PHP:
    <?php
    abstract class misfits {    protected $name;    protected $power;        public function __construct($name$power){        $this->name $name;        $this->power $power;        print ("Abbiamo creato " $name " un eroe<br>")    }        public abstract function role();}
    class 
    hero extends misfits{        public function __construct($name$power){        $this->name $name;        $this->power $power;        print ("Abbiamo creato " $name " un eroe<br>")    }        public function role(){        return ($this->name " è un eroe e il suo potere è: " $this->power "<br><br>");    }}
    class 
    villain extends misfits{        public function __construct($name$power){        $this->name $name;        $this->power $power;        print ("Abbiamo creato " $name " un antagonista<br>")    }        public function role(){        return ($this->name " è un antagonista e il suo potere è: " $this->power "<br><br>");    }}
    ?>
    codice HTML:
    <html>	<head>		<title>CLASSI ASTRATTE</title>	</head>	<body bgcolor="#AABB00" text="#FFFFFF">
    Codice PHP:
    <?php
    $samuel 
    = new hero ("Samuel""Invisibilità");print $samuel->role();
    $nathan = new hero ("Nathan""Immortalità");print $samuel->role();
    $brian = new villain ("Brian""Milkchinesis");print $brian->role();
    ?>
    codice HTML:
    	</body></html>

  7. #17
    Magari mettedo il ; dopo i vari print() !!!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #18
    Utente di HTML.it L'avatar di madquake
    Registrato dal
    Jun 2008
    residenza
    Manchester
    Messaggi
    85
    Hahahahaha... Grazie mille...
    Sono proprio cu cu oggi!!!!

    Queste sono le cose per le quali mi perdo sempre!!!!

  9. #19
    Utente di HTML.it L'avatar di madquake
    Registrato dal
    Jun 2008
    residenza
    Manchester
    Messaggi
    85
    Non ho capito solo una cosa...

    Se io definisco una classe astratta e per esempio creo il costruttore all'interno di quella classe posso definirlo 'abstract' se poi lo vado a ridefinire in una classe reale.

    Quello che non capisco è:
    1. Se io definisco un metodo completo nella classe astratta devo per forza riscriverlo nella sottoclasse o lo prende di default attraverso l'ereditarietà?
    2.Per quale motivo dovrei definire classi astratte o interfacce se poi devo comunque riscrivere tutto all'interno delle sottoclassi reali?
    3. Se definisco un costruttore nella classe astratta, e implemento argomenti ecc nel costruttore, devo riscrivere tutto nella sottoclasse o basta che indico l'esistenza del costruttore stesso?

    Grazie mille

  10. #20
    Quote Originariamente inviata da madquake Visualizza il messaggio
    Non ho capito solo una cosa...
    1. Se io definisco un metodo completo nella classe astratta devo per forza riscriverlo nella sottoclasse o lo prende di default attraverso l'ereditarietà?
    2.Per quale motivo dovrei definire classi astratte o interfacce se poi devo comunque riscrivere tutto all'interno delle sottoclassi reali?
    3. Se definisco un costruttore nella classe astratta, e implemento argomenti ecc nel costruttore, devo riscrivere tutto nella sottoclasse o basta che indico l'esistenza del costruttore stesso?
    1. La seconda che hai detto.
    2. Non devi riscrivere tutto. I metodi abstract sono obbligatori gli altri a seconda delle necessità.
    3. Non devi sovrascrivere nulla se non ne hai bisogno.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

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.