Ciao a tutti,
sto avendo dei problemi per quanto riguarda la programmazione ad oggetti su php 5.1.4 installata sul server di produzione...premetto che sul mio mac in locale ho installato un 5.0.4 dove fila tutto liscio
:
cercando di sintetizzare la situazione del codice sottopongo il problema...se dovesse essere troppo complicato capire il tutto chiedete pure 
in poche parole devo controllare la disponibilità delle tariffe di una stanza per un dato periodo di tempo e mi avvalgo quindi di alcuni oggetti
l'oggetto BookingRate, che estende Rate
Codice PHP:
class BookingRate extends Rate
{
private $roomId;
private $available;
public function __construct($rateId,$roomId)
{
parent::__construct($rateId);
$this->available = 0;
$this->roomId = $roomId;
}
public function setAvailable($value)
{
$this->available = $value;
}
public function isAvailable()
{
return $this->available;
}
}
l'oggetto BookingRoom che estende Room e che al suo interno contiene un array di BookingRate
Codice PHP:
class BookingRoom extends Room
{
protected $rates = array(); // in Room è presente un array $rates di tipo Rate
public function __construct($roomId,$hotelId)
{
parent::__construct($roomId,$hotelId,1);
$this->rates[0] = new BookingRate(0,$roomId); // inizializzo il primo elemento dell'array con la finta tariffa che contiene
$this->getRatesList();
}
public function getRateElement($element)
{
return $this->rates[$element];
}
public function getRatesList()
{
$query = $this->db_query("SELECT thebox_room_rate.rate_id FROM thebox_room_rate INNER JOIN thebox_rates ON thebox_room_rate.rate_id = thebox_rates.rate_id WHERE room_id = '".parent::getRoomId()."' AND rate_online = 1");
while($rates = mysql_fetch_assoc($query))
$this->rates[] = new BookingRate($rates["rate_id"],parent::getRoomId());
}
public function getRatesAvailableQuantity()
{
$disponibili = 0;
for ($i = 0; $i < count($this->rates); $i++)
if ($this->rates[$i]->isAvailable() == 1)
$disponibili++;
return $disponibili;
}
}
orbene, quando si tratta di fare il controllo, utilizzo questo metodo della classe RoomAvailability
Codice PHP:
public function checkRoomAvailability() // SONO ARRIVATO FIN QUI
{
for ($k = 0; $k < $this->room->rateIterator(); $k++)
{
if ($k == 0) // Total Allocated/Available/Booked - Intanto vedo se c'è disponibilità globale per la stanza. Se non c'è è inutile cercare per ciascuna
// tariffa e quindi esco dicendo che la stanza non è disponibile
{ if (!$this->checkRateAvailabillity(0))
return false;
}
else // verifico altrimenti tariffa per tariffa la disponibilità della stanza.
{
$rateId = $this->room->getRateElement($k)->getRateId();
if ($this->checkRateAvailabillity($rateId))
{
$this->available = true;
$this->room->getRateElement($k)->setAvailable(1);
}
if ($this->available)
{
if (!$this->setPrices($rateId))
{
if ($this->room->getRatesAvailableQuantity() == 1)
$this->available = false;
$this->room->getRateElement($k)->setAvailable(0);
//nel caso in cui questa sia l'ultima rate del ciclo e al primo controllo era risultata disponibile rendendo disponibile anche
//la stanza, ora devo invalidare anche la stanza
}
}
}
}
return $this->available;
}
che funziona bene, a parte questo "piccolo" problema
Codice PHP:
$this->room->getRateElement($k)->setAvailable(1);
infatti setAvailable(1) non setta proprio un fico secco
nonostante $this->room->getRateElement($k) mi ritorni correttamente il riferimento all'oggetto di cui voglio modificare l'attributo available
se in BookingRate faccio ad esempio
Codice PHP:
public function setAvailable($value)
{
print $value;
$this->available = $value;
print $this->available;
}
ricevo effettivamente il valore giusto e $this->available viene settato giusto, se però poi faccio all'interno di checkRoomAvailability
Codice PHP:
if ($this->checkRateAvailabillity($rateId))
{
$this->available = true;
$this->room->getRateElement($k)->setAvailable(1);
print $this->room->getRateElement($k)->isAvailable();
}
mi stampa 0!
cosa posso fare? sul mac in locale funziona!
gracias