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

    [CLASS]da Php4 a php5 proprietà non definite

    Ciao a tutti,
    lavorando su delle classi e utilizzando il php5 mi sono accorto (ma non vorrei sbagliare) che se in una class non è definita una proprietà e la si valorizzi, nel PHP5 non è un errore...corretto?

    esempio:

    in PHP4 ricordo che avrei ricevuto un errore perchè settavo una proprietà insistente
    Codice PHP:
    class miaclasse
    {
    function 
    miaclasse($x)
      {
      
    $this->$x="pippo";
      }
    }
    $obj=new miaclasse("ciccio"); 
    in PHP5 non ricevo errori e la proprietà viene settat...ma vorrei evitare di settare proprietà non esistenti nella classe.

    Come posso fare?
    Luca Bottoni's World
    www.bottonisworld.com

  2. #2
    Puoi usare get_object_vars() oppure isset() se la proprietà NON può avere valore NULL.

    In ogni caso, sei davvero sicuro di dover utilizzare un costrutto del genere?

  3. #3
    no, quello era un seplice esempio.

    isset() dovrebbe andare benissimo..pensavo ci fosse una funzione nel PHP5 che comunque eseguiva un controllo.

    grazie mille
    Luca Bottoni's World
    www.bottonisworld.com

  4. #4
    Mi sfugge questo..esempio

    Codice PHP:
    class Padre
      
    {
      public 
    $nome;

      public 
    __construct($data)
        {
        
    self::set($data);
        }
       public 
    set($data)
        {
        
    //print_r($this);
        
    foreach($data as $k=>$v)
          {
          if(isset(
    $this->$k)){$this->$k=$v;}
          }
        } 
      }

    class 
    Figlio extends Padre
      
    {
      public 
    $cognome;
      public 
    __construct($data)
        {
        
    parent::set($data);
        }
      }

    $son=new Figlio(array("nome"=>"luca","cognome"=>"bottoni"));

    print_r($son); 
    Cosa succede, che la $son->set() ereditata dal padre, quando è invocata dal figlio caratterizza solo le proprietà della classe padre e non quelle presenti nel figlio, ma se stampo il $this nel padre quando si esegue il set() le proprietà del figlio ci sono!!

    Come mai non riconsoce le proprietà del figlio la set del padre (ma il dump dice che ci sono!)?
    Luca Bottoni's World
    www.bottonisworld.com

  5. #5
    Posta un esempio che si possa compilare e ne parliamo.

    In ogni caso, isset() ritorna false se una variabile esiste MA è NULL.

  6. #6
    e nel mio post precedente l'esempio..vedrai che $this->cognome non è stato settato
    Luca Bottoni's World
    www.bottonisworld.com

  7. #7
    Originariamente inviato da lbottoni
    e nel mio post precedente l'esempio..vedrai che $this->cognome non è stato settato
    L'esempio del tuo post precedente genera un Parse error ...

  8. #8
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  9. #9
    corretto l'uso dell'overload. mostro l'esempio (corretto nella sinstassi).

    Codice PHP:
    class Padre
      
    {
      public 
    $nome;

        public function 
    set($data)
            {
            foreach(
    $data as $k=>$v)
                {
                
    $this->$k=$v;
                }
            }
        function 
    __set($name,$value)
            {
            echo 
    "questa non la setto $name-->$value
    "
    ;
            }
      }

    class 
    Figlio extends Padre
        
    {
        public 
    $cognome;
        public function 
    __construct($data)
            {
            
    parent::set($data);
            }
        }

    $son=new Figlio(array("nome"=>"luca","cognome"=>"bottoni","alias"=>"thebottons"));

    print_r($son); 
    Nel mio esempio precedente non venivano settate le proprietà, perchè isset() non considerava nulla se non dichiarato anche vuoto (bastava mettere le proprietà public $nome="") perchè venissero considerate nella Padre->set(). il fenomeno che ho incontrato è l'overload, il quale è però controllabile tramite la funzione magica __set($k,$v)

    ecco cosa stampa il codice:

    questa non la setto alias-->thebottons

    Figlio Object
    (
    [cognome] => bottoni
    [nome] => luca
    )

    Grazie a tutti e due per la dritte.
    Luca Bottoni's World
    www.bottonisworld.com

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.