Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    44

    costruttore che trasforma la classe

    io vorrei fare una cosa così (non so se possibile):
    un costruttore che in base a ciò che riceve come parametro, costruisce classi diverse ma che tutte ereditano dalla stessa classe (in cui esso è definito).

    ad esempio passo come parametro la stringa "triangolo altezza 2m e base 4m",
    il costruttore la elabora (e non è questo il mio problema) e poi costruisce la classe Triangolo, che eredita da FormeGeometriche. in questo modo ho a disposizione un metodo come getArea().
    Allo stesso modo se la stringa è "sfera di raggio 1m densità 1Kg/m^3" il costruttore costruisce la classe Sfera, anche lei eredita da FormeGeometriche, e ho ad esempio così a disposizione il metodo getPeso().

    Ripeto: il mio problema non è elaborare la stringa (ho fatto degli esempi un po' complessi, ma era per farmi, spero, capire).

  2. #2
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    si dovrebbe capire bene cosa hai nella testolina...
    cmq è possibile generare delle classi in maniera dinamica ,ma non è un approccio semplice.Penso dovresti sfruttare al massimo le risorse che mette a disposizione l'ereditarietà di PHP utilizzando una classe genitore ed implementando solo i metodi necessari alle classi figlie.Al più ,potresti implementare una struttura a reattore o dispatcher(da qualche parte ne ho già parlato) nella quale hai un gestore che analizza e cattura ,tramite il suo costruttore, l'evento e lo conserva all'interno della sua classe.Successivamente lo stesso viene processato da un metodo che si occupa di verificare l'esistenza di una classe e di un metodo corrispondente.In caso positivo verrà istanziata una classe e attivato il metodo richiesto ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    356
    se ho capito bene vuoi fare qualcosa tipo quello che si fa in java...

    prova a vedere se questo può esserti utile: http://www.justskins.com/forums/php-...ion-64253.html

    io non l'ho visto approfonditamente
    Jekkil

  4. #4
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    quello che si fa in java si può fare anche in php

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    44
    grazie, ora leggo e poi provo. vi farò sapere.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    44
    codice:
    <?php
    class Component{
    		
    	public function __construct($what)
    	{
    		switch($what)
    		{
    			case 1:
    			{
    				$this = new Resistance();
    				break;
    			}
    			
    			case 2:
    			{
    				$this = new Capacitance();
    				break;	
    			}
    		}
    	}
    	
    	abstract function getName();
    }
    
    //Resistance
    class Resistance extends Component
    {
    	function getName()
    	{
    		return "i'm a resistor";	
    	}
    }
    
    
    //Capacitance
    class Capacitance extends Component
    {
    	function getName()
    	{
    		return "i'm a capacitor";	
    	}	
    }
    
    ////////////////////////////////////////////////////
    
    $comp = new Component(1);
    
    echo $comp->getName();
    ?>
    Ecco ciò che ho intenzione di fare. ovviamente ricevo un errore quando tento di riassegnare $this, ma questa è l'idea di ciò che vorrei fare.

    come potrei implementare ciò?

  7. #7
    Prova ad approfondire questo:

    http://it.wikipedia.org/wiki/Factory_method

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    44
    grandioso! se qualcun altro è interessato, consiglio il wiki della stessa pagina in inglese (che contiene molte più informazioni, tra cui un esempio)

    facendo così sembra funzionare
    codice:
    <?php
    abstract class Component{
    		
    	public static function build($what)
    	{
    		switch($what)
    		{
    			case 1:
    			{
    				return new Resistance();
    			}
    			
    			case 2:
    			{
    				return new Capacitance();
    			}
    		}
    	}
    	
    	abstract function getName();
    }
    
    //Resistance
    class Resistance extends Component
    {
    	function getName()
    	{
    		return "i'm a resistor";	
    	}
    }
    
    
    //Capacitance
    class Capacitance extends Component
    {
    	function getName()
    	{
    		return "i'm a capacitor";	
    	}	
    }
    
    ////////////////////////////////////////////////////
    
    $comp = Component::build(2);
    
    echo $comp->getName();
    ?>
    é il modo corretto? quindi niente costruttore...

  9. #9
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    e se avessi 100 classi?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    44
    Che vuoi dire?

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.