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

    [PERFORMANCE] i metodi statici sono lenti?

    sono solito creare delle classi quali contenitori logici di funzioni (nonche' per sfruttare qualche costante). percui mi ritrovo con molti metodi statici (stati public function()) e mi chiedevo se il fatto che un metodo sia statico influisce negativamente sulle performance.

    (non so, magari un metodo statico viene salvato da qualche parte in memoria, chissà)
    si vivono molte vite e si muore una volta sola

  2. #2

  3. #3
    molto interessante! cmq niente di critico penso. per concludere la discussione riporto le varie possibilità in ORDINE DECRESCENTE DI VELOCITA':

    1) calcolo in linea (+ veloce di tutti)
    2) chiamata a funzione
    3) chiamata a funzione tramite oggetto
    4) metodo statico ( static function miastatfunc() ) chiamato staticamente ( miaclass::miastaticfunc )
    5) metodo non specificato ( function miabohfunc ) chiamato tramite oggetto
    6) metodo non specificato chiamato staticamente

    ---------------------------------------------------------------

    faccio notare che l'autore dell'articolo nel secondo link di Filippo in critica l'articolo nel primo link. essendo piu' completo ho preferito riportare quello (il secondo link)
    si vivono molte vite e si muore una volta sola

  4. #4
    voglio far notare una cosa, che purtroppo viene spesso messa da parte: fidati se ti dico che la velocità di esecuzione di un metodo o di una funzione (come tempo necessario di php per effettuare il richiamo, non la funzione) è relativo infatti:
    - la progettazione ad oggetti fa schizzare verso l'alto, se fatta bene, la possibilità di riutilizzo del codice
    - spesso il codice è progettato male od è scritto male cosa che rende assolutamente ininfluente se si stanno usando metodi o funzioni
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    Originariamente inviato da daniele_dll
    voglio far notare una cosa, che purtroppo viene spesso messa da parte: fidati se ti dico che la velocità di esecuzione di un metodo o di una funzione (come tempo necessario di php per effettuare il richiamo, non la funzione) è relativo infatti:
    - la progettazione ad oggetti fa schizzare verso l'alto, se fatta bene, la possibilità di riutilizzo del codice
    - spesso il codice è progettato male od è scritto male cosa che rende assolutamente ininfluente se si stanno usando metodi o funzioni
    e aggiungiamo pure che non sono il massimo
    in una progettazione OOP.


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

  6. #6
    avete ragione ragazzi, guai a farsi incantare da questi benchmark e scordarsi di scrivere codice pulito e architetture ben progettate
    si vivono molte vite e si muore una volta sola

  7. #7
    Originariamente inviato da dogeht
    avete ragione ragazzi, guai a farsi incantare da questi benchmark e scordarsi di scrivere codice pulito e architetture ben progettate
    Solo una cosa: personalmente abborro l'utilizzo di metodi statici perché riducono la rintracciabilità del codice.

    Nel mentre se istanzi un oggetto, attraverso il codice, puoi seguirne la sua vita con facilità la stessa cosa non è vera per un metodo statico che richiamato svolge delle operazioni

    In realtà su questo punto si ci spacca in due, c'è chi consiglia i metodi statici però personalmente ho smesso di usarli ... preferisco usare una classe che mi raccolga le istanze degli oggetti e se li porti dietro per farli usare dove serve
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  8. #8
    Si ma abolire l'uso dei metodi statici non ha senso.

    Lasciando stare per un attimo php, della cui oop non mi intendo molto..., parliamo in generale.
    I metodi statici non vanno usati a caso, così come gli specificatori di visibilità (public, protected, private); ma vanno utilizzati con criterio.

    La particolarità di un metodo statico è che non ne può essere fatto l'overriding e quindi va usato quando si ha la necessità che una ipotetica sottoclasse NON DEVE fare l'overriding di quel metodo. Negli altri casi può non avere senso usare metodi statici.

    Se uno li abolisce a priori si perde una bella fetta di cose.
    Administrator of NAMDesign.Net

  9. #9
    Originariamente inviato da LeaderGL
    Si ma abolire l'uso dei metodi statici non ha senso.

    Lasciando stare per un attimo php, della cui oop non mi intendo molto..., parliamo in generale.
    I metodi statici non vanno usati a caso, così come gli specificatori di visibilità (public, protected, private); ma vanno utilizzati con criterio.

    La particolarità di un metodo statico è che non ne può essere fatto l'overriding e quindi va usato quando si ha la necessità che una ipotetica sottoclasse NON DEVE fare l'overriding di quel metodo. Negli altri casi può non avere senso usare metodi statici.

    Se uno li abolisce a priori si perde una bella fetta di cose.
    Beh si, anche se in C# è possibile aggirare l'ovveride con una parola chiave new.

    Negli altri linguaggi ci sono altri sistemi per impedire l'override di un metodo/proprietà, in php no, ma non si possono mica usare i metodi statici per questo.

    Se qualcuno è cosi tonto da fare l'override di un metodo per il quale non deve farlo (perché sta scritto nella doc) è normale che avrà un malfunzionamento

    In realtà tutto quello fatto con i metodi statici può essere fatto senza metodi statici, non si perde nulla, ripeto è più un fatto di scelte proprie non di altro
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    io i metodi statici li uso anziche' implementare una classe singleton:

    * le proprietà dell'oggetto singleton diventano le proprietà statiche della classe
    * invece del __construct prevedo un metodo initialize() [+ veloce]
    * l'accesso ai metodi statici e' garantito ovunque anziche' richiamare un'istanza register che contiene tutte le altre istanze [+ veloce]

    non vedo controindicazioni, se non quelle relative a rimettere mano al codice da parte di altri. non ne ho la necessità per ora, percui...
    si vivono molte vite e si muore una volta sola

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.