Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130

    metodi statici presenti anche nell'istanza?

    ciao a tutti. ho notato che i metodi statici di una classe (diciamo A) sono presenti come metodi di istanza negli oggetti istanziati a partire dalla classe stessa. tipo:

    Codice PHP:
    class A{
        static public function 
    foo(){
            echo 
    "metodo statico!
    "

        }
    }

    // posso fare 
    A:foo();
    // oppure anche
    $obj = new A;
    $obj->foo(); 
    MA PERCHE'???? perche? ce un motivo sensato per permettere questo o e' un'altra delle incosistenze di PHP?

  2. #2
    Se non ricordo male anche in Java è possibile richiamare un metodo statico da un istanza della classe che lo contiene...

    Perchè non dovrebbe essere possibile? Finchè il metodo è visibile non vedo il motivo per cui lo si potrebbe richiamare soltanto tramite il nome della classe e non una sua istanza...visto che la classe contiene quel metodo e quel metodo è visibile (public nel tuo caso)...
    Administrator of NAMDesign.Net

  3. #3
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    si ma la cosa che mi suona male e' che lo chiami come metodo dell'istanza stessa:

    $obj->foo();

    volevo capire se il metodo diventa anche metodo di istanza una volta che $obj e' stato creato.

  4. #4
    Ciao.
    Dai un occhio qui esiste
    anche il thread in italiano ma me lo sono
    pescato


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

  5. #5
    è un'assurdità tutta di PHP, e l'argomento l'ho affrontato personalmente mesi fa, senza risultati.
    La differenza con Java è che questo supporta overload dei metodi, mentre PHP no, ergo mentre in Java puoi utilizzare quel metodo come reale metodo di istanza, in PHP non puoi farlo e ti ritrovi ad usare un metodo statico che non può ne contenere un riferimento $this, ne essere overloadato.
    codice:
    class String {
        protected $_value;
        public function __construct($_value){
            $this->_value = $_value;
        }
        static public function show(String $instance){
            echo $instance->_value;
        }
    }
    
    // non senso
    $s = new String("hello");
    $s->show($s);
    
    
    // nel mondo Java puoi aggiungere questo
    ...
    public function show(){
        echo $this->_value;
    }
    ...
    Nel mondo Java puoi usare $s->show(); invece di dover passare l'istanza stessa ad un metodo statico che non accetta $this al suo interno.
    Java nasce Object Oriented, PHP non ha mai capito cosa significhino quelle due lettere ... sta provando a farlo solo negli ultimi mesi, ma sarà ancora semi buio nella versione 6 se non si danno una svegliata
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    come sempre andr3a va piu' profondo di quello che posso capire a colpo d'occhio. vabbe quindi per concludere questi metodi statici diventano di istanza o no? mi pare di si no?

  7. #7
    per concludere si, li puoi usare dalle istanze, ma non puoi usare il this dentro il metodo, se dichiarato statico, puoi farlo non dichiarandolo statico, controllando che il $this sia settato, e beccandoti un E_STRICT error che significa che un domani non funzionerà
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    grazie! il fatto che NON si possa usare il this mi sta anche bene dato che non dovrebbe essere metodo di istanza. la cosa folle e' che, in reealta', lo copiano dentro l'istanza. Insomma o la fanno completa (presente in istanza e con this accessibile) o non la fanno proprio (richiamabile come class::statico() e this meaningless).

    boh io ste menate non le capisco.

  9. #9
    non le capisce nessuno, quindi sono loro che sono troppo avanti.

    E quando risolveranno ste menate, ci chiederemo perche' non l'abbiano fatto prima
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.