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

    Funzioni o programmazione a oggetti?

    Ho in progettazione un sito piuttosto complesso e sto cercando di studiarmi un sistema per ottimizzare le risorse il più possibile.

    Tra le varie cose, pensavo di strutturarlo quasi interamente tramite la programmazione oggetti, ma durante lo studio in rete ho letto che, spesso, le chiamate a certi metodi consumano molta più memoria dell'uso di funzioni o di codice esterno alle classi.
    Riporto per esempio il testo:

    <<
    Richiamare una funzione vuota passando un solo parametro impiega lo stesso tempo di 7-8 $localvar++. Analogamente, la chiamata di un metodo altrettanto semplice impiega l'equivalente di 15 $localvar++. Sei proprio sicuro di voler utilizzare obj->setValue($var)?
    >>

    Ovviamente le classi vanno benissimo se c'è una manipolazione "a tema" (es: classe per la gestione dei prodotti). Ma inizialmente pensavo di usare le classi anche per questioni di pulizia.
    Per fare un esempio, avrei costruito una classe "general_functions" che raccoglie tutte le mie funzioni personalizzate: le classi successive le deriverei da questa.

    A questo punto vi chiedo: è meglio evitare le classi se non sono proprio necessarie? Come strutturate voi i siti complessi, tutto a OOP oppure usate parecchie funzioni esterne a sé stanti?
    Ultima modifica di Vincent_E; 06-03-2014 a 13:11

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Se questo fosse davvero un problema, la programmazione ad oggetti non esisterebbe.

  3. #3
    Il mio dubbio non è se usare o meno la programmazione a oggetti, perché senz'altro è utile sotto vari punti di vista: struttura più facile da gestire, accedere a dati aggregati, possibilità di implementare interfacce e di lavorare con più programmatori contemporaneamente, ecc.

    Il mio dubbio è quando non usarla. A differenza di altri linguaggi non lato server, come per esempio il java, il php ha una gestione di risorse e memoria più complicata e quindi ha delle limitazioni di base che altri non hanno (aggirabili o meno).

    Come idea avevo intenzione di creare una serie di classi derivate a cascata del tipo:
    classe per funzioni generali
    classe per manipolazione di errori che estende la precedente
    classe per la gestione html che estende la precedente

    Tutte le classi successive le farei come estensione della "classe html", visto che potrebbero usare metodi di una o di un'altra classe "padre".

    Però comincio ad avere il dubbio che non sia il sistema più performante e che sarebbe meglio splittare, per esempio, la classe "funzioni generali" in funzioni vere e proprie, che saranno richiamate all'occorrenza dentro le classi.
    Le terresti come metodi di classe o funzioni?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Secondo me è solo questione di praticità personale.
    In quanto ad occupazione di memoria non penso che includere un file o invocare una classe faccia molta differenza, in entrambi i casi il codice va a finire in memoria.

    Allo stesso modo non fa molta differenza in termini di tempo.
    Ammettiamo che sia vero ciò che hai riportato nel primo post: vuol dire che l'invocazione di un metodo di una classe impiega il doppio del tempo rispetto alla chiamata di una funzione.

    Prova questo codice, ti dice quanto ci mette ad invocare una funzione e quanto ad invocare un metodo... in microsecondi.
    A me dice 0, il che vuol dire che non c'è differenza con precisione al microsecondo... e non solo, esegue tutto il codice all'interno del microsecondo.

    Codice PHP:
    class Pippo
    {
        function 
    tempo()
        {
            return 
    microtime();
        }
    }

    $t0 microtime();
    $t1 microtime();
    $diff $t1 $t0;
    echo 
    "t0: ".$t0."<br />";
    echo 
    "t1: ".$t1."<br />";

    echo 
    "Tempo di chiamata funzione: ".$diff."<br /><br />";

    $pippo = new Pippo();

    $t0 $pippo->tempo();
    $t1 $pippo->tempo();
    $diff $t1 $t0;
    echo 
    "t0: ".$t0."<br />";
    echo 
    "t1: ".$t1."<br />";

    echo 
    "Tempo di chiamata metodo: ".$diff."<br />"
    Ultima modifica di Alhazred; 06-03-2014 a 15:09

  5. #5
    Fatto anch'io il test e in effetti non noto differenze.
    Ho provato a testare anche inserendo operazioni un po' più complesse dentro e fuori la classe (magari appena ho tempo testo con operazioni più pesanti).

    Intanto grazie per le risposte

  6. #6
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Secondo me è solo questione di praticità personale.
    In quanto ad occupazione di memoria non penso che includere un file o invocare una classe faccia molta differenza, in entrambi i casi il codice va a finire in memoria.

    Allo stesso modo non fa molta differenza in termini di tempo.
    Ammettiamo che sia vero ciò che hai riportato nel primo post: vuol dire che l'invocazione di un metodo di una classe impiega il doppio del tempo rispetto alla chiamata di una funzione.

    Prova questo codice, ti dice quanto ci mette ad invocare una funzione e quanto ad invocare un metodo... in microsecondi.
    A me dice 0, il che vuol dire che non c'è differenza con precisione al microsecondo... e non solo, esegue tutto il codice all'interno del microsecondo.

    Codice PHP:
    class Pippo
    {
        function 
    tempo()
        {
            return 
    microtime();
        }
    }

    $t0 microtime();
    $t1 microtime();
    $diff $t1 $t0;
    echo 
    "t0: ".$t0."<br />";
    echo 
    "t1: ".$t1."<br />";

    echo 
    "Tempo di chiamata funzione: ".$diff."<br /><br />";

    $pippo = new Pippo();

    $t0 $pippo->tempo();
    $t1 $pippo->tempo();
    $diff $t1 $t0;
    echo 
    "t0: ".$t0."<br />";
    echo 
    "t1: ".$t1."<br />";

    echo 
    "Tempo di chiamata metodo: ".$diff."<br />"
    secondo me per fare un test accurato bisognerebbe scrivere codice più complesso.
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Quote Originariamente inviata da ciro78 Visualizza il messaggio
    secondo me per fare un test accurato bisognerebbe scrivere codice più complesso.
    Era per rispondere alla citazione di Vincent_E che parlava di una funzione ed un metodo semplice che fa la stessa cosa.

  8. #8
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    In quanto ad occupazione di memoria non penso che includere un file o invocare una classe faccia molta differenza, in entrambi i casi il codice va a finire in memoria.
    Non conosco dettagliatamente come opera l'interprete php, ma il file della classe non viene sempre incluso ? O viene incluso solo se viene usata la classe ?

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Di questo aspetto non sono sicuro neanche io, non mi sono mai interessato alla cosa, ma ai fini della discussione che differenza fa?

    La classe nel mio esempio l'ho messa assieme a tutto il codice, ma ovviamente in un progetto reale andrà in un file a se stante, se ti serve lo metti nel progetto, altrimenti no, così come faresti con un file contenente le stesse funzioni in versione procedurale, se ti serve lo usi includendolo, altrimenti no.

    La situazione in entrambi i casi è la stessa.

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.