Home
Home
Tutorials
   PHP
   Java
   Tutti...
Manuali
SmartImage
Marketing
Downloads
Contatti
Affiliati

  Da vedere
Hosting
Statistiche per siti
Corsi per webmaster
Hardware
Processori


  OnFocus
Can't use function return value in write context in...

UnripeGod

Contatore di visite senza database

  Siti Amici
Miki News
Giochi gratis
Areagratis
Baratto Online
AI Machines
Guide e Manuali Gratis
DirectoryGratis.it
Elenco Domini .it
Aziende di trasporto
SoftGame.it
Tutorialing
devreference.org
Add to Technorati Favorites

Tutti i siti amici
Diventa Affiliato

 


Autore: Alessandro Coscia
Categoria: php
Livello: normale Livello normale

Il pattern Singleton in PHP: persistenza durante una sessione

Rendere una classe persistente durante la sessione di un utente

Vi avevamo già spiegato cos'è e come si implementa un Singleton nell'articolo precedente, ora renderemo quella stessa classe persistente durante tutta la sessione dell'utente (ovvero sinchè l'utente chiuderà il browser.

Ovviamente nessun programmatore con un minimo di senno si diverte a reinventare l'acqua calda dunque utilizzeremo le sessioni già messe a disposizione da PHP.

Ricordiamo il codice d'esempio di un Singleton presentato nell'articolo precedente:

<?php

class Single {

  private static $singleton null;
  private $var;

  static function getInstance(){
    if (Single::$singleton == null){
      Single::$singleton = new Single();
    }
    return Single::$singleton;
  }

  function __construct(){
    $this->var rand();
  }

  function getVar(){
    return $this->var;
  }
}

$single Single::getInstance();
echo 
"Primo get: ".$single->getVar()."<br />";

$single Single::getInstance();
echo 
"Secondo get: ".$single->getVar()."<br />";

?>


Prima di tutto aggiungeremo in cima a questo sorgente (o prima quando necessario) il richiamo al metodo per avviare le sessioni in PHP
session_start()


In seguito andiamo ad operare su getInstance() facendo in modo che non controlli solo la propria variabile static ma che controlli anche in $_SESSION se c'è una sua istanza archiviata:
  static function getInstance(){
    if (Single::$singleton == null){
        if (isset($_SESSION['single'])) {
            Single::$singleton $_SESSION['single'];
        }
        else {
              Single::$singleton = new Single();
              $_SESSION['single'] = Single::$singleton;
        }
    }
    return Single::$singleton;
  }


In questo modo se non c'è un'istanza di Single si cerca nelle sessioni prima di crearne una.
Ciò vuol dire che il Singleton di cui parliamo sarà persistente durante tutta una sessione relativamente ad un solo utente. Inoltre alla chiusura del browser il singleton verrà perso.

Le applicazioni di un sistema del genere potrebbero essere molteplici, un Singleton come questo potrebbe dare un punto di vista privilegiato (e favorevole) al programmatore per capire gli spostamenti dell'utente (per esempio sistemi di tracciamento e rilevazione dei ROI).

Ripubblico di seguito l'intero codice, buon divertimento!
<?php
session_start
();

class 
Single {

    private static $singleton null;
    private $var;

    static function getInstance(){
        if (Single::$singleton == null){
            if (isset($_SESSION['single'])) {
                Single::$singleton $_SESSION['single'];
            }
            else {
                Single::$singleton = new Single();
                $_SESSION['single'] = Single::$singleton;
            }
        }
        return Single::$singleton;
    }

    function __construct(){
        $this->var rand();
    }

    function getVar(){
        return $this->var;
    }
}

$single Single::getInstance();
echo 
"Primo get: ".$single->getVar()."<br />";

$single Single::getInstance();
echo 
"Secondo get: ".$single->getVar()."<br />";

?>



Implementare il pattern Singleton in script PHP Precedente Indice Successivo Mambo: Unknown column 'c.access' in 'on clause'
Implementare il pattern Singleton in script PHP Mambo: Unknown column 'c.access' in 'on clause'