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

    problemi con 5.0.4 in locale e 5.1.4 su server

    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

  2. #2
    mi sono dimenticato di aggiungere una cosa: mentre sul mac in locale ho l'opzione per disabilitare la retrocompatibilità con php4 disattivata dal php.ini, sul server abbiamo dovuto mantenerla di default e quindi la disabilito di volta in volta con ini_set, però anche disseminando gli scripts interessati con queste direttive non cambia assolutamente nulla e nemmeno lavorando con error_reporting(E_STRICT) ottengo informazioni necessarie a risolvere il problema...

  3. #3

  4. #4
    possibile che a nessuno sia successo qualcosa del genere e che non ci sia una soluzione?

  5. #5
    possibile che nessuno riesca nemmeno a dire "rata so cazzi tuoi"?

  6. #6
    aggiornamento: mettendo error_reporting(E_STRICT) ora viene fuori una sfilza di errori, della serie

    Strict Standards: Implicit cloning object of class 'mysql' because of 'zend.ze1_compatibility_mode' in /var/www/ehbox/bookings/server.php on line 22

    Strict Standards: Implicit cloning object of class 'BookingUtils' because of 'zend.ze1_compatibility_mode' in /var/www/library/class.teo.php on line 977


    ma io quell'opzione l'ho messa a off

  7. #7
    funziona! funziona! funziona!


    non so come mai ma è bastato mettere ini_set("zend.ze1_compatibility_mode",0); solo una volta, all'inizio del file con le classi


    volevo ringraziare, tutti quanti, uno ad uno, per avermi dato una mano, ma che dico, almeno cagato la discussione

  8. #8
    Originariamente inviato da Ratatuia
    funziona! funziona! funziona!

    volevo ringraziare, tutti quanti, uno ad uno, per avermi dato una mano, ma che dico, almeno cagato la discussione
    prego, prego. A nome di tutti ...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    dato che non mi funziona ancora una cosa, mi viene un dubbio

    è la stessa cosa fare

    $puntatore = new OggettoDaIstanziare();


    e

    $oggetto = new OggettoDaIstanziare();
    $puntatore = $oggetto;

    ?


    questo in php5...

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.