Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087

    [PHP] classe non setta il valore di data

    Salve ho cambiato uno scriptino, per OOP, preso da un libro della hoepli.
    Nella classe c'è una funzione che deve settare il valore introdotto come data .
    strtotime($valore_passato) , Se la risposta è -1 il valore introdotto è errato!
    Invece posso passargli qualsiasi stringa, se la beve e la pubblica!
    ecco il codice
    codice:
                     class proObj {
        private $_propieta = array(
                      'nome' => null,
                      'data' => null
    				 );
    
        public function _get($propNome) {
          if(!array_key_exists($propNome, $this->_propieta)) {
            throw new Exception('Valore della proprietà non valido!');
            }
          if(method_exists($this, '_get' . $propNome)) {
            return call_user_func(array($this, '_get' . $propNome));
            } else {
            return $this->_propieta[$propNome];
            }
        }
        public function _set($propNome, $value) {
          if(!array_key_exists($propNome, $this->_propieta)) {
            throw new Exception("Valore " . $propNome . " non valido!");
            }
          if(method_exists($this, '_set'.$propNome)) {
            return call_user_func(
                      array($this, '_set'.$propNome),
                      $value
                       );
            }  else {
            $this->_propieta[$propNome] = $value;
            }
        }
        public function _setDataNascita($dn) {
          if(strtotime($dn) == -1) {
            throw new Exception("La data di nascita deve essere valida!");
          }
          $this->_propieta['data'] = $dn;
        }
        public function saluto() {
          echo "Salve! il mio nome è $this->nome.  Sono nato il $this->data";
        }
      }
    ############################  RICHIAMO per visualizzare
        $obj = new proObj();
      $obj->nome = "ZZZ";
      $obj->data = 'March 5, 1987';
      $obj->saluto();
     
     echo "
    ";
    
      $obj2 = new proObj();
      $obj2->nome = "Altro nome"; 
      $obj2->data = "blue"; //_setDataNascita è richimata da _set .... 'blue'; //throws  exception
      $obj2->saluto();
    grazie

  2. #2

  3. #3
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    ti ringrazio Filippo, ma si beve ugualmente tutto!

  4. #4
    il problema non sta nella classe ma nella funzione strtotime:

    "Returns a timestamp on success, FALSE otherwise. Previous to PHP 5.1.0, this function would return -1 on failure." (http://it2.php.net/strtotime)

    percio' diventa
    Codice PHP:
    if(strtotime($dn) == false
    ciao
    danno

  5. #5
    I metodi magici sono __get() e __set() con due underscore, non uno.
    strtotime() restituisce FALSE in caso di errore, non -1.

    Correggi il codice di conseguenza e vedrai che funziona.

  6. #6
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    grazie a Danno e Filippo
    Infatti ho una versione sup a 5.1

  7. #7
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    ho portato le correzioni suggerite ma continua a non funzionare
    mah!
    sempre grazie

  8. #8
    A me funziona perfettamente:

    Codice PHP:
    <?php
    class proObj {
        private 
    $_propieta = array(
                      
    'nome' => null,
                      
    'data' => null
                     
    );

        public function 
    __get($propNome) {
          if(!
    array_key_exists($propNome$this->_propieta)) {
            throw new 
    Exception('Valore della proprietà non valido!');
            }
          if(
    method_exists($this'_get' $propNome)) {
            return 
    call_user_func(array($this'_get' $propNome));
            } else {
            return 
    $this->_propieta[$propNome];
            }
        }
        public function 
    __set($propNome$value) {
          if(!
    array_key_exists($propNome$this->_propieta)) {
            throw new 
    Exception("Valore " $propNome " non valido!");
            }
          if(
    method_exists($this'_set'.$propNome)) {
            return 
    call_user_func(
                      array(
    $this'_set'.$propNome),
                      
    $value
                       
    );
            }  else {
            
    $this->_propieta[$propNome] = $value;
            }
        }
        public function 
    _setdata($dn) {
          if(
    strtotime($dn) == FALSE) {
            throw new 
    Exception("La data di nascita deve essere valida!");
          }
          
    $this->_propieta['data'] = $dn;
        }
        public function 
    saluto() {
          echo 
    "Salve! il mio nome è $this->nome.  Sono nato il $this->data";
        }
      }
    ############################  RICHIAMO per visualizzare
        
    $obj = new proObj();
      
    $obj->nome "ZZZ";
      
    $obj->data 'March 5, 1987';
      
    $obj->saluto();
     
     echo 
    "
    "
    ;

      
    $obj2 = new proObj();
      
    $obj2->nome "Altro nome"
      
    $obj2->data "blue"
      
    $obj2->saluto();

    ?>

  9. #9
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    grazie Filippo,
    hai ragione .. ora lo script fa il suo lavoro.
    Alla prossima
    Lucio

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.