secondo me il suo problema non è avere oggetti singleton (che in realtà è solo un oggetto) ma avere X oggetti diversi evitando però di creare doppioni.
secondo me la migliore soluzione sarebbe quella di creare 2 classi distinte
una classe GG esattamente come hai fatto te
una classe singleton GGManager che permette di istanziare oggetti GG e che al suo interno presenta un array di oggetti GG creati
la classe GGManagar espone solo un metodo (statico ovviamente) createGGObject(param...)
che controlla se all'interno dell'array esisto un oggetto con id uguale e se si ritorna quell'oggetto, altrimenti ne crea uno nuovo, lo aggiunge all'array e lo ritorna.
So di non essere stato chiaro... provo con un piccolo esempio (lo sto facendo al volo, quindi ci possono essere errori di sintassi...)
spero di aver reso l'idea... :PCodice PHP:
class GGManager {
static GGs = new Array();
static function getGG(id, bla, bla, bla...) {
foreach($GGManager::GGs as $GG) {
if($gg->id == $id) return $gg
}
$gg = new GG(id, bla, bla, bla...);
$GGManager::GGs[] = $gg;
return $gg
}
}
www.gext.it
6 stato molto utile & chiaro, grazie infiniteOriginariamente inviato da tarini
secondo me il suo problema non è avere oggetti singleton (che in realtà è solo un oggetto) ma avere X oggetti diversi evitando però di creare doppioni.
secondo me la migliore soluzione sarebbe quella di creare 2 classi distinte
una classe GG esattamente come hai fatto te
una classe singleton GGManager che permette di istanziare oggetti GG e che al suo interno presenta un array di oggetti GG creati
la classe GGManagar espone solo un metodo (statico ovviamente) createGGObject(param...)
che controlla se all'interno dell'array esisto un oggetto con id uguale e se si ritorna quell'oggetto, altrimenti ne crea uno nuovo, lo aggiunge all'array e lo ritorna.
So di non essere stato chiaro... provo con un piccolo esempio (lo sto facendo al volo, quindi ci possono essere errori di sintassi...)
spero di aver reso l'idea... :PCodice PHP:
class GGManager {
static GGs = new Array();
static function getGG(id, bla, bla, bla...) {
foreach($GGManager::GGs as $GG) {
if($gg->id == $id) return $gg
}
$gg = new GG(id, bla, bla, bla...);
$GGManager::GGs[] = $gg;
return $gg
}
}
![]()
わさび
Codice PHP:
class GGManager
{
static $GGs = Array();
static function getGG($id)
{
foreach(self::$GGs as $key => $GG)
{
if(self::$GGs[$key]->id == $id)
{
return $gg;
}
}
$gg = new GG($id);
self::$GGs[] = $gg;
return $gg;
}
}
![]()
Without faith, nothing is possible. With it, nothing is impossible
http://ilwebdifabio.it
Originariamente inviato da whisher
Codice PHP:
class GGManager
{
static $GGs = Array();
static function getGG($id)
{
foreach(self::$GGs as $key => $GG)
{
if(self::$GGs[$key]->id == $id)
{
return $gg;
}
}
$gg = new GG($id);
self::$GGs[] = $gg;
return $gg;
}
}
![]()
e non è uguale al mio?? :P
www.gext.it
Mi scusi sv![]()
era solo per rettificare
if($gg->id == $id)
![]()
Without faith, nothing is possible. With it, nothing is impossible
http://ilwebdifabio.it
Scusate, ma non ho mai usato una sintassi simile,
potreste farmi un esempio di come vengono istanziati gli oggetti e come viene verificata la presenza di un id con queste classi?
Codice PHP:
class GG {
var $id, $nome, $ruolo, $available;
// constructor
function GG( $id, $nome, $ruolo, $available ) {
$this->id = (int)$id;
$this->nome = $nome;
$this->ruolo = $ruolo;
$this->available = (bool)$available;
}
}
class GGManager {
static $GGs = array();
static function getGG( $id, $nome, $ruolo, $available ) {
foreach( self::$GGs as $key => $GG ) {
if( self::$GGs[$key]->id == $id ) {
return $gg;
}
}
$gg = new GG( $id, $nome, $ruolo, $available );
self::$GGs[] = $gg;
return $gg;
}
}
わさび
cosa sai sulla OOP? sai cosa significa che un entità è statica ?
www.gext.it
cmq in una pagina farei:
Codice PHP:
//includo i file ovviamente :P
//questi sono oggetti diversi tra loro
$gg1 = GGManager::getGG(1,"nome","impiegato",true);
$gg2 = GGManager::getGG(2,"nome2","quadro",true);
$gg3 = GGManager::getGG(3,"nome3","dirigente",true);
//questo equivale a fare $gg4 = $gg1 (l'id è uguale)
$gg4 = GGManager::getGG(1,"nome3","dirigente",true);
www.gext.it
ne so poco; ho letto abbastanza ma ho scritto ben poco di mano mia, ecco perchè sto cercando di sforzarmi di costruire delle classi. Si, so cosa è la static function ma non l'ho mai usata.Originariamente inviato da tarini
cosa sai sulla OOP? sai cosa significa che un entità è statica ?
grazie, ora vedo di fare praticaOriginariamente inviato da tarini
cmq in una pagina farei:[...]![]()
わさび