Newsgroup: it.comp.www.php
Titolo: Problema con classe

Ciao a tutti e buon 2004 !
Ho scritto una classe piuttosto semplice per inserire dei prodotti in
un carrello, ma a quanto pare non riesco a farla funzionare correttamente.
Posto' solamente il codice secondo me interessante, per evitare ridondanza.
Dunque, la pagina dove passo i valori e istanzio la classe contiene il
seguente codice:
$carrello = new Carrello;
if(!isset($_SESSION['cart'])) { $cart = array(); $_SESSION['cart'] = $cart; }
switch($_GET['mod'])
	{
	case "add"
	$carrello->addProdotti($_GET['id'] , $_GET['quantita'])
	break;
	... seguono altre funzioni di rimozione, aggiornamento ecc ...
 
	}
Quindi in base al contenuto della variabile $_GET['mod'] decido se
aggiungere, rimuovere ... articoli dal carrello che è un array, ovvero
$cart
Veniamo alla classe:
class Carrello {
	var $prodotti;
function addProdotti($artId, $numArt) {
	global $cart;
 
	if(isset($cart) && is_array($cart)) { $this->prodotti = $cart; } else {
	return false; }
	.... diversi controlli dopo, arriviamo al punto saliente ....
	if(isset($this->prodotti[$artId]) && ($this->prodotti[$artId] > 0)) 
	{ $this->prodotti[$artId] += $numArt; return $this->prodotti[$artId]; }
	else { $this->prodotti[$artId] = $numArt; return $this->prodotti[$artId]; } 
// Fine
}  ... ecc ... }
Non c'è verso di farla funzionare. Il contatore "prodotti" e le relative
quantità, è fermo a zero.
Apro la classe, e sostituisco ogni riferimento di "$this->prodotti", in
"$cart", tutto funziona correttamente.
Sicuramente si tratterà di un fesseria che mi sfuggie ma evidentemente
gli sto girando attorno.
Prima di concludere, un ultima domanda: sto usando alcune classi
per semplificarmi un po' il lavoro, ma a anche a scopo didattico. 
In effetti la programmazione per così di dire "tradizionale" è
probabilmente piu' intuitiva, ma fa lo stesso. 
Tuttavia non mi è del tutto chiaro quali conseguenze potrei incontrare
sotto qualsiasi punto di vista, utilizzando "$cart" nella classe di cui sopra piuttosto che usare
"$this->prodotti" (sicuramente piu' corretto)
Grazie a tutti.
clust 		

 corretto)
Utilizzare le classi e poi inserire un global $cart; e' un controsenso.
oltre a questo l'utilizzo di $cart e' inutile in quanto puoi
tranquillamente utilizzare $this->prodotti al suo posto:
<?php 
class Carrello 
{
	var $prodotti;
 
	function Carrello ()
	{
		$this->prodotti = array();
 
		if (!headers_sent())
		{ session_start(); }
		else
		{ die ("Errore di avvio sessione!"); }
 
		if ((isset ($_SESSION["cart"])) && (is_array ($_SESSION["cart"])))
		{ $this->prodotti = $_SESSION["cart"]; }
		else
		{ $_SESSION["cart"] = array(); }
	}
	function updateCart () 
	{ $_SESSION["cart"] = $this->prodotti; }
 
	function addProdotti($artId, $numArt) 
	{
		if (isset ($this->prodotti[$artId]) && ($this->prodotti[$artId] > 0)) 
		{ $this->prodotti[$artId] += $numArt; }
		else 
		{ $this->prodotti[$artId] = $numArt; } 
 
		$this->updateCart ();
		return $this->prodotti[$artId]; 
	} 
	function delProdotti($artId, $numArt) 
	{
		// codice per la rimozione
		$this->updateCart ();
	}
}
$carrello = new Carrello;
$carrello->addProdotti ("pippo", 2);
$carrello->addProdotti ("topolino", 2);
$carrello->addProdotti ("minni", 2);
$carrello->addProdotti ("pippo", 1);
print_r ($carrello);
?>
-- 
I'am what I'am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/1

 tranquillamente utilizzare $this->prodotti al suo posto:
... e anche qui concordo e lo immaginavo. Il punto era che avevo provato
alcune volte senza risultati di rilievo. Meglio così...
Ti ringraziono per la porzione di codice... in effetti volendola dire
tutta non è che si trattasse di qualcosa di impossibile, e nemmeno troppe
modifiche d'apportare.
Talvolta, è forse meglio fermarsi e perchè non riscrivere la porzione
incriminata, piuttosto che cercare di apportare modifiche a codice
non propriamente corretto :-)
Thank's clust !