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

    Lavorare sulle date con php oop

    Ciao, sto cercando di scrivere un metodo che possa incrementare di un solo giorno una data già invocata con un altro oggetto.
    In poche parole

    $data=new data(1,1,2013);

    $datasucc=$data->successivo();


    Il costruttore già fà le verifiche si semantica sulla data quindi in sintesi se inserisco 29/2/2007 mi torna 28/2/2007 (non è bisestile) etc. etc...

    Come si fà a creare un oggetto da un altro e a modificarne però solo un attributo ?

    Grazie,
    Ciao.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Sicuro di non poter usare la classe datetime che ti fornisce php bella e pronta e che include anche la funzione add() che ti permette di aggiungere mesi, giorni, ore, minuti e secondi ad una certa data?

  3. #3
    eh no, sto facendo degli esercizi per capire le dinamiche della OOP quindi devo farlo per forza in questo modo...:-)

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Allora devi aggiungere una funzione alla tua classe data() che aggiunga un giorno alla data che gli passi.

    Modificare un oggetto tramite un altro oggetto non è una pratica ortodossa, non vedo scenari dove possa essere utile.
    La modifica all'oggetto deve essere fatta dalla classe che gli compete, non da altre.

  5. #5
    Ok, la stavo facendo ma non capisco come scrivere il codice.

    public function successivo(){
    //codice
    }

  6. #6
    Non sò se può essere corretto scrivere così

    public function successivo(){
    this->setDay($this->getDay()+1);
    }

    il problema è quando chiamo il metodo

    $data=new data(1,1,2013);
    $data2=$data->successivo();

    Il metodo successivo non và a modificare nulla, cioè l'oggetto $data2 non esiste per niente.
    Ho scritto altri semplici metodi finora ma nessuno di questo tipo, cioè creare un clone (senza poter usare l'istruzione clone) variandone solo un attributo.

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Esempio
    Codice PHP:
    class Prova
    {
        private 
    $attributo;
        
        function 
    __construct()
        {
            
    $this->attributo 'pippo';
        }
        
        public function 
    set_attributo($val)
        {
            
    $this->attributo $val;
        }
        
        public function 
    get_attributo()
        {
            return 
    $this->attributo;
        }
    }

    $var1 = new Prova();

    echo 
    'attributo $var1: '.$var1->get_attributo().'
    '
    ;

    $var1->set_attributo('pluto');

    echo 
    'attributo $var1 dopo set: '.$var1->get_attributo().'
    '
    ;

    $var2 unserialize(serialize($var1));

    echo 
    'attributo $var2: '.$var2->get_attributo().'
    '
    ;

    $var2->set_attributo('topolino');

    echo 
    'attributo $var2 dopo set: '.$var2->get_attributo(); 

  8. #8
    Originariamente inviato da freddie1978
    Non sò se può essere corretto scrivere così

    public function successivo(){
    this->setDay($this->getDay()+1);
    }

    il problema è quando chiamo il metodo

    $data=new data(1,1,2013);
    $data2=$data->successivo();

    Il metodo successivo non và a modificare nulla, cioè l'oggetto $data2 non esiste per niente.
    Ho scritto altri semplici metodi finora ma nessuno di questo tipo, cioè creare un clone (senza poter usare l'istruzione clone) variandone solo un attributo.
    freddie fà un passo indietro: il metodo succesivo non ritorna nulla (non c'è la clausola return ) quindi in $data2 = $data->successivo(), $data2 = null! Quindi o successivo fà una cosa del tipo:

    Codice PHP:

    public function successivo(){
       
    $data = new self(); //passare i dati al costruttore se ci sono
       
    $data->setDay($this->getDay()+1);
       return 
    $data;

    altrimenti non so quale sia l'idea dell'esercizio
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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.