Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [PHP5] Proprietà statiche

    Salve genietti,

    stò allargando il mio bagaglio culturale e mi sono imbattuto in questo bell'argomento, premetto che sfrutto già da un pò di tempo i metodi statici, con delle classi "factory" per creare ad esempio tag html.. ma ora sono venuto a conoscenza dell'esistenza delle proprietà statiche, un piccolo esempio:

    Codice PHP:
    abstract class casa {
      static 
    $x 1;

      abstract public function 
    __construct();
    }

    class 
    tetto_casa extends casa {

      public function 
    __construct() {
        
    $this->self::$x--;
      }
    }

    class 
    parete_casa extends casa {

      public function 
    __construct() {
        
    $this->self::$x++;
      }


    Per quello ke ho appreso fino ad ora, posso avere disponibile la proprietà (in questo caso $x) all'interno di ogni istanza della classe derivata e modificarla come voglio.. Spero di aver appreso giusto..

    Quello che mi chiedo è: qual'è l'utilità di questo processo?? e solitamento dove viene utilizzato nella realtà?? dove si può implementare una cosa del genere??

    azie
    Questa volta, più che un voto.. è favoreggiamento.

  2. #2
    Dal manuale http://www.php.net/manual/it/language.oop5.static.php:

    A member declared as static can not be accessed with an instantiated class object (though a static method can).

    Static properties cannot be accessed through the object using the arrow operator ->.
    Nel tuo esempio accedi nelle due sottoclassi accedi ad $x ma non stai realmente accedendo alla proprietà statica $x dichiarata nella classe casa.

    Le proprietà statiche sono proprietà che "appartengono" alla classe e non all'oggetto (istanza). Sono utili per l'implementazione di certi pattern come il singleton (vedi http://www.php.net/manual/it/language.oop5.patterns.php).

  3. #3
    Ciao filippo.toso si avevo già visto i patterns e anche il singleton il problema è che alla fine anche sulla guida di php comunque si richiama sempre un metodo statico vedi:
    Codice PHP:
    $test Example::singleton(); 
    Quello che non mi è chiaro è l'utilità di avere una proprietà statica all'interno della classe.. Forse non riesco a cogliere la sottigliezza..
    Questa volta, più che un voto.. è favoreggiamento.

  4. #4
    Quello che non mi è chiaro è l'utilità di avere una proprietà statica all'interno della classe
    Studiati che cosa fa il metodo Example::singleton() e capirai a che cosa serve avere una proprietà statica all'interno della classe.

  5. #5
    certo discuterne in un forum dove ci possono essere pareri diversi esperienze diverse e confronti sarebbe stato molto più bello..
    la prossima volta vedro di parlare al manuale di php x vedere cosa risponde, eviterò di sollevare problemi inutili ke tanto c'è il manuale..

    Questa volta, più che un voto.. è favoreggiamento.

  6. #6
    Hai almeno provato a guardare il codice del metodo Example::singleton(); per capire come viene utilizzata la proprieta' statica $instance?

    Se tu lo avessi fatto avresti sicuramente compreso l'utilità di avere una proprietà statica all'interno della classe.

  7. #7
    Sinceramente oltre a quello ho letto anche i 4 articoli su devshed dove alejandro gervasio parla dei patterns e del singleton e della gestione dei dati statici.. Non a caso gran parte della mia cultura deriva da li anche..

    Se poi non arrivo a capirne l'utilità ti ripeto, parlo alla pagina della guida php o magari ci sbatto la testa 4-5 volte cosi incomincio a usare certe funzioni solo per il gusto di usarle.. xke sono scritte..

    Questa volta, più che un voto.. è favoreggiamento.

  8. #8
    Ciao.
    Fino a non molto tempo fa ritenevo l'uso
    dei metodi statici una cosa molto cool
    poi mi sono dovuto ricredere ti posto
    alcuni links

    what's so bad about singleton


    registry qui ho preso una boccata sbagliando si impara


    static per riflessioni


    Per quello che posso aver capito con una migliore
    progettazione dell'applicazione/design puoi evitare
    di usare static.







    PS.
    Sono ancora in fase di riflessione
    quando pensi di aver capito come funzionano le cose
    ecco che appare ............
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  9. #9
    Ciao caro whisher, felice di rivederti..

    Grazie per le indicazioni, domani mi guardo i link sicuramente utili che hai postato..

    Non mi vorrai dire che:
    Codice PHP:
    $tag_p factory_oggetti::crea_oggetto('p', array()); 
    e cosi via con tutti i tag, mi stà portando un pò fuori strada??
    E' un pò stringata spero si capisca il senso..
    Questa volta, più che un voto.. è favoreggiamento.

  10. #10
    Originariamente inviato da Al_katraz984
    Codice PHP:
    $tag_p factory_oggetti::crea_oggetto('p', array()); 
    Per i widgets ti posto la mia implementazione che
    usa un sigleton ma + a monte (non saprei dirti se è
    la migliore )


    Codice PHP:
    class WidgetsFactory{
        private static 
    $instancenull;
        private function 
    __construct(){}
        public static function 
    getInstance(){
               if(
    is_null(self::$instance)){
                
    $class__CLASS__;
                
    self::$instance = new $class;
               }
            return 
    self::$instance;
           }
        public function 
    create($class,$attributes){
            if(!
    class_exists($class)||!is_array($attributes)){
                throw new 
    WidgetsException('Invalid parameters in class [b]['.__CLASS__.'][/b]',0,new WidgetsException());
            }
            return new 
    $class($attributes);
        }

    che poi utilizzo in questo modo:

    Codice PHP:
    class ContactFormHeaderView{
        private 
    $widgetsnull;
        private 
    $viewnull;
        public function 
    __construct(){
            
    $this->widgetsWidgetsFactory::getInstance();
            
    $this->setView();
        }
        private function 
    setView(){
            
    $this->view$this->widgets->create('H2',array());
            
    $this->view->setData('Scrivici!');
        }
        public function 
    getView(){
            return 
    $this->view;
        }
        final public function 
    __destruct(){
            unset(
    $this->widgets);
            unset(
    $this->view);
        }


    Si potrebbe anche pensare di passare un oggetto per
    aggregazione o estendere le views da una classe madre e si raggiunge lo stesso scopo.


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

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.