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 include_once
/ require_once
in each file .php
cui utilizzi le tue classi di utilità 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 🙂