Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Semplificazione richiamo funzioni singleton

    buona sera, mi sono studiato un pò il pattern singleton e ho trovato sia molto utile per gestire un sistema multiclasse senza includersi sempre tutto, l'unico inconveniente mi sembra che sia la complicatezza del codice per richiamare una funzione di una classe instanziata in singleton...mettidamo che ora ho;

    Codice PHP:
     Singleton::Istanza()->Funzione(); 
    per richiamare una funzione anche statica che prima richiamavo semplicemente con

    Codice PHP:
     Funzione(); 
    ora con tutto quel codice si rischia di fare confusione...conoscete un metodo per semplificare la cosa?

  2. #2
    puoi anche fare così:
    Codice PHP:
    $obj Singleton::Istanza();

    $obj->Funzione(); 
    ma a parte questo in una classe Singleton le funzioni in genere non sono statiche.

  3. #3

    Re: Semplificazione richiamo funzioni singleton

    Originariamente inviato da giorda86
    buona sera, mi sono studiato un pò il pattern singleton e ho trovato sia molto utile per gestire un sistema multiclasse senza includersi sempre tutto, l'unico inconveniente mi sembra che sia la complicatezza del codice per richiamare una funzione di una classe instanziata in singleton...mettidamo che ora ho;

    Codice PHP:
     Singleton::Istanza()->Funzione(); 
    per richiamare una funzione anche statica che prima richiamavo semplicemente con

    Codice PHP:
     Funzione(); 
    ora con tutto quel codice si rischia di fare confusione...conoscete un metodo per semplificare la cosa?

    eh si so proprio tonnellate di righe di codice


    poi, scusa, se è per fare una classe di Utility, non ti serve il singleton (oppure non ti serve di richiamare esplicitamente l'istanza). Es:


    Codice PHP:

    abstract class Utility{

    public static function 
    Funzione(){ return "Hello World!"; }

    public static function 
    getRedBalloon($testo){
    return 
    "<div class=\"redballoon\">$testo</div>";
    }

    }

    //usage
    echo Utility::getRedBalloon(Utility::Funzione()); 
    Questo è un modo
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Se invece la classe utility ha bisogno di una istanza ma può essere esposta solo a metodi statici, puoi fare:

    Codice PHP:
    final class Utility{
        
        
    /**
         *
         * @var Utility
         */
        
    private static $instance;
        
        
    /**
         *
         * @var int
         */
        
    private $counter 0;
        
        
        private function 
    __construct() {
            
        }
        
        
    /**
         * 
         * @return Utility instance
         */
        
    private static function getInstance(){
            if(!
    self::$instance)
                
    self::$instance=new self;
            
            return 
    self::$instance;
        }
        
        private function 
    incrementa($valore){
            
    $this->counter+=$valore;
        }
        
        
    /**
         * 
         * @return int
         */
        
    public static function Funzione(){
            
            
    $instance self::getInstance();
            
    $instance->incrementa(100);
            
            return 
    $instance->counter;
        }
        
        
        
    }


    //usage
    $i 0;
    while(
    $i<10){
        echo 
    "counter dopo il giro ".($i+1)." ha valore ".Utility::Funzione()."\n";
        
    $i++;

    altrimenti esponi l'instanza con un getInstance
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Grazie, ragionandoci un pò ci ero arrivato... ho anche implementato un autoload con autoload register per semplificare ancora di più le cose...

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.