Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di C232
    Registrato dal
    Dec 2004
    Messaggi
    303

    quando avviene il poliformismo in PHP

    ragazzi quando avviene il poliformismo in PHP?
    C/C++

  2. #2
    cos'è il poliformismo?

  3. #3
    Utente di HTML.it L'avatar di JHammer
    Registrato dal
    Sep 2004
    Messaggi
    754
    [supersaibal]Originariamente inviato da pugia
    cos'è il poliformismo? [/supersaibal]
    Ha...kuesti pseudo web coders!!! Skerzo ovviamente...

    E a proposito...a quando la meta programmazione???

  4. #4
    [supersaibal]Originariamente inviato da JHammer
    Ha...kuesti pseudo web coders!!! Skerzo ovviamente...

    E a proposito...a quando la meta programmazione??? [/supersaibal]
    e l'utilità della tua rispposta qual è?

    pugia e C232: in generale il polimorfismo è una caratteristica della programmazion ad oggetti che permette di avere funzioni con lo stesso nome ma che sono di fatto diverse.. perchè hanno parametri di tipo o di numero diverso...

    In php in realtà tutte le funziono sono in un certo senso polimorfe... perchè possiamo definire funzioni che abbiano parametri opzionali.. a cui probabilmente, nel codice sorgente del php, corrispondono oggetti polimorfi (overloading dei parametri)

    si consiglia la lettura di qualsiasi manuuale di OOP [anche non specifico di php]


  5. #5
    Utente di HTML.it L'avatar di JHammer
    Registrato dal
    Sep 2004
    Messaggi
    754
    [supersaibal]Originariamente inviato da }gu|do[z]{®©
    In generale il polimorfismo è una caratteristica della programmazion ad oggetti che permette di avere funzioni con lo stesso nome ma che sono di fatto diverse.. perchè hanno parametri di tipo o di numero diverso...
    Allora il polimorfismo non va confuso con l'overloading o con l'ovverriding...errore comune per chi si avvicina alla programmazione ad oggetti.
    Il polimorfismo significa avere una classe derivata avente
    una funzione UGUALE (come nome e come numero/tipo di parametri) a quella della classe base

    esempio:

    codice:
    class FiguraGeometrica
    {
     public:
        virtual float Area();
    }
    
    class Cerchio : public FiguraGeometrica
    {
      float Area()
      {
        return(3.14 * raggio*raggio);
      }
      float raggio;  
    }
    
    class Quadrato : public Figurageometrica
    {
      void Area()
      {
        return(lato*lato);
      }
      float lato;
    }
    In questo modo quando ho un oggetto FiguraGeometrica posso richiamare Area() ed essere sicuro che venga eseguita la funzione 'giusta' senza preoccuparmi se è un quadrato o un cerchio. Il trucco sta nel fatto che per ogni oggetto viene riservata un'area di memoria in cui sono memorizzati i puntatori alle funzioni 'giuste' (virtual function pointer table). Così tutti gli oggetti 'cerchio' hanno un ptr che punta alla formuletta del pigreco...ma noi non vediamo i detagli e scriviamo area = figura.Area()
    Questo è il polimorfismo.

    In php in realtà tutte le funziono sono in un certo senso polimorfe... perchè possiamo definire funzioni che abbiano parametri opzionali.. a cui probabilmente, nel codice sorgente del php, corrispondono oggetti polimorfi (overloading dei parametri)
    Non solo non è supportato il polimorfismo ma neppure l'overloading!!!
    In verità il PHP mi pare lontano anni luce dalla 'pulizia' di un codice C++ o anche solo Java. Anche se il PHP 5 mi pare un pò meglio...con tutto il rispetto per il piaccapi mi pare un somaro che vuo fare il cavallo

    si consiglia la lettura di qualsiasi manuuale di OOP [anche non specifico di php]
    [/supersaibal]
    Infatti...

    Se C3p8 può chiedere a quando il polimorfismo...io chiedo...a quando la metaprogrammazione?

    Ce ne vuole...ce ne vuole...


  6. #6
    [supersaibal]Originariamente inviato da JHammer
    Se C3p8 può chiedere a quando il polimorfismo...io chiedo...a quando la metaprogrammazione?

    Ce ne vuole...ce ne vuole...
    [/supersaibal]
    E che te ne faresti della metaprogrammazione in PHP?
    Sarà che ne so veramente poco, ma non ci vedo l'utilità.

  7. #7
    Scusami JHammer... sono ben conscio che l'overloading non sia propriamente "il" polimorfismo.. che nel significato più astratto del termine è la capacità di risolvere dinamicamente il ricevente del messaggio.. giusto? dinamic lookup.. late binding.. etc etc... ricordo qualcosa per quanto non usi in modo massiccio la oop... ma overloading e overriding sono due particolari tipi di polimorfismo, o no?

    Il discorso che facevo sull'overloading in php era diverso da come l'hai capito: dicevo che poichè php non è fortemente tipizzato e le funziono possono avere parametri opzionali, in un certo senso sono polimorfe (non è rproprio overloading perchè la funzione è sempre una, ma hai flessibilità simile).. poi è chiaro che il polimorfismo non è del php ma NEL php.. nel senso che il "vero" polimorfismo sta nel C++ sorgente di PHP, e gli permette di essere così flessibile [con arricciamento di naso di chi giustamente vuole codice "pulito"].... è giusto no?

    In ogni caso tutte queste cose non potevi dirle alla prima risposta senza sfotticchiare chi le ignorava?


  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    190
    'sti nerd

    parlate un po' più potabile, che roba è l'overloading overriding overmycock...

  9. #9
    Utente di HTML.it L'avatar di C232
    Registrato dal
    Dec 2004
    Messaggi
    303

    ...

    il poliformismo so quando avviene, quando una classe derivata viene definita durante la sua istanza come una classe base ed entrambi hanno uno stesso metodo. (detto volgarmente)

    Pero in PHP c'è mancanza di tipi quindi mi sono chiesto come sia possibile?
    C/C++

  10. #10
    codice:
    <?php // 5
    interface FiguraGeometrica {
        public function Area();    
    }
    
    class Cerchio implements FiguraGeometrica {
        public function __construct( $raggio ){
            $this->raggio = &$raggio;
        }
        public function Area() {
            return ( 3.14 * $this->raggio * $this->raggio );
        }
        private $raggio;
    }
    
    class Quadrato implements FiguraGeometrica {
        public function Area() {
            return ( $this->lato * $this->lato );
        }
        private $lato;
    }
    
    
    
    $miaFigura = &new Cerchio( 10 );
    echo $miaFigura->Area().'<hr />';
    if( is_a( $miaFigura, 'Cerchio' ) ) {
        echo 'OK
    ';
    }
    if( is_a( $miaFigura, 'FiguraGeometrica' ) ) {
        echo 'OK
    ';
    }
    ?>


    [editato]
    dimenticavo, per i tipi di dato in PHP4 come in PHP5 ci sono varie soluzioni, una tra queste:

    http://www.devpro.it/php5_id_42.html

    [rieditato]
    ... che sto' per aggiornare perche' in RC1 andava ma ora mi sono accorto che non andava

    cmq sia, altro esempio
    codice:
    require( 'TypeHints.class.php' );
    
    interface FiguraGeometrica {
        public function Area();    
    }
    
    class Cerchio implements FiguraGeometrica {
        public function __construct( Float &$raggio ){
            $this->raggio = &$raggio->value;
        }
        public function Area() {
            return new Float( 3.14 * $this->raggio * $this->raggio );
        }
        private $raggio;
    }
    
    class Quadrato implements FiguraGeometrica {
        public function __construct( Float &$lato ){
            $this->lato = &$lato->value;
        }
        public function Area() {
            return new Float( $this->lato * $this->lato );
        }
        private $lato;
    }
    
    $miaFigura = &new Cerchio( new Float( 10 ) );
    echo $miaFigura->Area()->value.'<hr />';
    if( is_a( $miaFigura, 'Cerchio' ) ) {
        echo 'OK
    ';
    }
    if( is_a( $miaFigura, 'FiguraGeometrica' ) ) {
        echo 'OK
    ';
    }
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.