ragazzi quando avviene il poliformismo in PHP?
ragazzi quando avviene il poliformismo in PHP?
C/C++
cos'è il poliformismo?
Ha...kuesti pseudo web coders!!! Skerzo ovviamente...[supersaibal]Originariamente inviato da pugia
cos'è il poliformismo? [/supersaibal]
E a proposito...a quando la meta programmazione???
e l'utilità della tua rispposta qual è?[supersaibal]Originariamente inviato da JHammer
Ha...kuesti pseudo web coders!!! Skerzo ovviamente...
E a proposito...a quando la meta programmazione??? [/supersaibal]
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]
![]()
Allora il polimorfismo non va confuso con l'overloading o con l'ovverriding...errore comune per chi si avvicina alla programmazione ad oggetti.[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...
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:
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()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; }
Questo è il polimorfismo.
Non solo non è supportato il polimorfismo ma neppure l'overloading!!!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)
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![]()
Infatti...si consiglia la lettura di qualsiasi manuuale di OOP [anche non specifico di php]
[/supersaibal]
![]()
Se C3p8 può chiedere a quando il polimorfismo...io chiedo...a quando la metaprogrammazione?
Ce ne vuole...ce ne vuole...
![]()
E che te ne faresti della metaprogrammazione in PHP?[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]
Sarà che ne so veramente poco, ma non ci vedo l'utilità.
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?
![]()
'sti nerd![]()
parlate un po' più potabile, che roba è l'overloading overriding overmycock...![]()
![]()
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++
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 aggiornareperche' 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 '; }