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

    [PHP5] classe statica e metodi " magici "

    un fatto strano ma magari e' normale ... quello che vorrei sapere e' se c'e' un modo per ovviare a questo inconveniente ...


    in pratica ho notato che dichiaro una classe e la utilizzo in modo statico

    Classe::metodo

    o

    Classe::$variabile

    non c'e' modo di utilizzare i metodi magici del php5, ovvero qualunque tentativo di implementare in modo statico o non statico i vari

    __call
    __set
    __get

    all' interno di quella classe, risulta completamente vano, questi non vengono presi minimamente in considerazione.

    Sto' sbagliando qualcosa ?
    qualcuno sa dirmi perche' e se e' possibile ovviare ?

    grazie
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #2
    Ciao andr3a,
    probabilmente i metodi __set, __get, __call etc.etc. , lavorano solo a livello di istanza e credo sia una scelta.
    Non so se sia diverso in altri linguaggi (a parte che in Php quei metodi si innescano soltanto per membri non definiti) però credo che mutare dinamicamente i membri statici di una classe sia considerata una violazione dell'interfaccia ...per ragioni che, non essendo un purista dell'oop, non sono in grado di comprendere del tutto
    per favore NIENTE PVT TECNICI da sconosciuti

  3. #3
    Ciao andr3a
    ciao Fabio


    probabilmente i metodi __set, __get, __call etc.etc. , lavorano solo a livello di istanza e credo sia una scelta.
    una statica non e' istanza di se stessa ? :master:

    cioe', istanziandola non faccio altro che ririferire la statica ad una variabile, ma alla fine non funziona lostesso ...

    $var = &new Classe();

    $var::metodo();

    non va ... proprio perche' e' la stessa cosa, Classe dovrebbe essere sempre autoreferenziata come istanza di se stessa .. o sto' delirando ?



    Non so se sia diverso in altri linguaggi (a parte che in Php quei metodi si innescano soltanto per membri non definiti)
    lo so, infatti mi serviva per una classe senza alcun metodo piena zeppa di variabili private statiche

    al richiamo della variabile senza $ , ovvero simulando il metodo, avrei dovuto incrementare un contatore interno e fare altre funzioni



    però credo che mutare dinamicamente i membri statici di una classe sia considerata una violazione dell'interfaccia ...per ragioni che, non essendo un purista dell'oop, non sono in grado di comprendere del tutto
    penso che in Python il concetto di violazione di quello che tu vuoi fare sia pressapoco un' eresia


    grazie per la risposta e pazienza, ho gia' provveduto a modificare la classe rendendola non statica, unico inconveniente ulteriore e' che un metodo __toString di una classe su un echo dentro un' altra classe non fa quanto richiesto , restituisce l' id dell' object



    bizzarro



    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    una statica non e' istanza di se stessa
    In PHP che io sappia no (poi bisognerebbe vedere gli internals in C), "static" definisce soltanto un contenitore di variabili e funzioni

    $var = &new Classe();

    $var::metodo();

    $var in questo caso un'istanza non una classe, quindi non puoi chiamare metodi statici su di esso

    Non so se faccia al caso tuo, ma l'unica cosa "dinamica" che ti è concessa quando hai a che fare con static è

    call_user_func_array(array($nomeClasse, $metodoStatico), $arrayParametri) ;

    e dentro metodo statico ovviamente puoi usare le proprietà così self:rop

    penso che in Python il concetto di violazione di quello che tu vuoi fare sia pressapoco un' eresia
    Sì, ho visto che Alex Martelli crea un flame sull'argomento quasi ogni giorno nella newsgroup di python


    P.s. OT

    Ho smesso di lamentarmi troppo di PHP da quando ho sbattutto contro i bug e buggetti (pesso non documentati) che infestano un software a pagamento come Flash Mx 2004
    per favore NIENTE PVT TECNICI da sconosciuti

  5. #5
    [supersaibal]Originariamente inviato da Fabio Heller
    Non so se faccia al caso tuo, ma l'unica cosa "dinamica" che ti è concessa quando hai a che fare con static è

    call_user_func_array(array($nomeClasse, $metodoStatico), $arrayParametri) ;
    [/supersaibal]
    un po' dispendioso , se devo sbattermi tanto vale non farla statica e fare $Classe->variabile(); ... e tanti saluti



    [supersaibal]Originariamente inviato da Fabio Heller
    Ho smesso di lamentarmi troppo di PHP da quando ho sbattutto contro i bug e buggetti (pesso non documentati) che infestano un software a pagamento come Flash Mx 2004 [/supersaibal]
    no no, ma chi si lamenta di PHP ? solo alcune cose non so perche' non le hanno permesse, il 5 e' un po' troppo ibrido per certe cose ... Flash MX 2004 ... lol se lo conosci ( lo eviti ) perdi piu' tempo a scrivere bugs-free che a sfruttarlo

    un solo esempio ...

    public function riceviStringa( pippo:String ) ...

    pluto.riceviStringa( 123 ) , tutto regolare per Flash

    hanno messo un typehints e oop java su un linguaggio poco tipizzato quale era, invece di continuare verso una oop python hanno scelto la java senza esserne in grado
    ( ed e' solo un' esempio dei tanti problemi ... )

    ho il terrore per la 8, se mai uscira'
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    Originariamente inviato da andr3a
    no no, ma chi si lamenta di PHP ? solo alcune cose non so perche' non le hanno permesse, il 5 e' un po' troppo ibrido per certe cose ... Flash MX 2004 ... lol se lo conosci ( lo eviti ) perdi piu' tempo a scrivere bugs-free che a sfruttarlo
    Non dicevo che ti stavi lamentando, infatti il p.s. era OT

    per favore NIENTE PVT TECNICI da sconosciuti

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.