Newsgroup: it.comp.www.php
Titolo: Proprietà Overload di php5

Salve, sto studiando un metodo per utilizzare ottimamente i nuovi
metodi di Overloading introdotti in Php5 ma sembrano non funzionare...
Mettiamo che ho una classe Class che ha dichiarato al suo interno una
variabile publica di nome Load e che come è normale possa venir
richiamata con la seguente sintassi:
$Class->Load
e che possa appunto esser utilizzata nei modi più disparati e quindi
anche ridefinita con un nuovo valore del tipo
$Class->Load = "new val";
ed qui dovrebbe entrare in azione la proprietà di php5 che permette di
intercettare la valorizzazione (__set) di una variabile, e quindi con
una cosa simile
public function __set($var, $value) { print $var."-".$value; }
non dovrebbe darmi problemi e appunto eseguire il print...
Sempre che io non mi sti sbagliando, il problema sta appunto che non
fa questo print ma valorizza tranquillamente la variabile Load
saltando eventuali check inseriti...
Qualcuno ha già utilizzato questa proprietà?

 Qualcuno ha già utilizzato questa proprietà?
Studiati questo codice:
<?php
class Test
{
   public function __set($name, $value)
   {
       echo "Setting [$name] to $value\n";
   }
}
$test = new Test();
$test->Load = 1;
?>
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

 Vieni a fare uno stage con noi:
http://www.creativepark.it/stage/
E' lo stesso esempio che ho usato come base... Testando ho notato che
questo metodo viene richiamato quando la var viene inizializzata la
prima volta, mentre se la si dichiara nella classe non viene presa in
considerazione... Non capisco come mai...
Soluzioni?

 Soluzioni?
Non devi dichiarare la proprieta' nella classe per utilizzare
__set/__get.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/


 Vieni a fare uno stage con noi:
http://www.creativepark.it/stage/
Più che altro a me serviva intercettare la valorizzazione di una var
della classe per gestire eventuali sovrascritture accidentali o volute
di variabili delicate...
Per quanto riguarda __get, non capisco allora che senso abbia se
funziona solo con le nuove var, non posso richiamare variabili che non
sono inizializzate e quindi non verrà mai usato questo metodo o
sbaglio?

 sono inizializzate e quindi non verrà mai usato questo metodo o sbaglio?
class Pippo
{
  private $_variabili = array();
  public function __set($k, $v)
  {
    if (in_array($k, array("pippo", "pluto", "paperino")) {
      $this->_variabili[$k] = $v;
    } else {
      throw new Exception("Variabile non valida");
    }
  }
  public function __get($k)
  {
    if (has_key($this->_variabili, $k)) {
      return $this->_variabili[$k];
    } else {
      throw new Exception("Variabile non valida");
    }
  }
}
$p = new Pippo();
$p->pippo = "ciao";
$p->poppi = "BUM!"; // -> Eccezione
print $p->pippo; // -> ciao
print $p->pluto; // ->Eccezione
$p->pluto = "ghe";
print $p->pluto; // -> ghe
print $p->guruguru; // -> eccezione
Bye.

 Qualcuno ha già utilizzato questa proprietà?
Utilizzare dei metodi getter/setter ?
Basta che per ogni proprietà imposti un getProprieta e setProprieta.
Alla fine anche se si allunga il brodo, diventa più facilmente
gestibile.
Ciao,
     Fabrizio
--website: 
http://www.negusweb.it
--lightest streaming player: 
http://www.radioconnectsoftware.com