Chiamata metodo metodo chiamata chiamata metodo class VS. La migliore pratica?

Sto scrivendo un'app in PHP e ho raccolto una raccolta di funzioni varie all'interno di una class che sto chiamando toolbox

Class toolbox { public function misc($var) { return do_something($var); } } 

Sto caricando la cassetta degli attrezzi dentro i miei vari script e poi usandola, ma non sono sicuro di quale dovrebbe essere la migliore pratica …

Opzione 1: chiamata metodo object

 __construct() { require_once('toolbox.php'); $this->ToolBox = new toolbox; } some_function($input){ return $this->ToolBox->misc($input); } 

Opzione 2: chiamata metodo di class

 __construct() { require_once('toolbox.php'); } some_function($input){ return ToolBox::misc($input); } 

C'è qualche tipo di best practice a riguardo? Non penso di aver bisogno di varie istanze della cassetta degli attrezzi.

Rendili funzioni statiche.

 class Toolbox { static public function Tool1(){ } } Toolbox::Tool1(); // Call the static method without instantiating the object 

Perché le classi statiche e non i namespace?

Perché le classi di utilità statiche tendono a crescere e tendono ad essere molte. Potresti averne uno per file , stringhe , matrici , ecc. Ognuno di loro può facilmente saltare linee da 5K o anche di più. Ma li usi sempre? NO! Potrebbero essere utilizzati nel 5% delle pagine del tuo sito. Quindi, perché includerli in primo luogo?

PHP Autoload ^ viene in nostro aiuto qui . Ma il caricamento automatico funziona solo con le classi mentre i namespace devono essere inclusi . Hai tre scelte ora:

  • include / require TUTTO così ti assicuri che i tuoi spazi dei nomi siano sempre accessibili, ma costringi PHP ad analizzare molti file per each ciclo, oltre a get la penalità intrinseca delle performance di including / requiring effettivamente un file
  • mantieni include_once / require_once in each file .php cui utilizzi le tue classi di utilità
  • usi spl_autoload_register e dimentichi le dependencies mentre il caricatore automatico fa il pesante sollevamento in background per te

I primi due possono funzionare con gli spazi dei nomi mentre l'ultimo ha bisogno di una class statica . Quando il tuo codice base cresce MOLTO, inizi ad apprezzare il autoload e inizi ad apprezzare le classi statiche indipendentemente da ciò che GLI ALTRI ti dicono. Così:

 best practices == guidelines && best practices != mandatory practices best practices != what works best in your specific scenario 

^ Preparati per i voti negativi ora 🙂