- si
- si
- solitamente le classi si salvano in un file con il nome della classe e l'estensione ".class.php". Esempio: class Pippo{} , la salvi in un file Pippo.class.php. In realtà a mio avviso sarebbe meglio scrivere le classi in questo modo: class.Pippo.php per il semplice fatto che se hai altri file nella stessa cartella (pasticcioso ma possibile), con un sort by name hai le classi raggruppate prima per prefisso, poi per nome, cosa non vera col classico sistema.
- l'organizzazione è solitamente per cartelle, partendo da una classica dir classes e varie sotto cartelle per i namespace/ pacchetti
- nota dolente ... mi spiego meglio ...
Io stesso pensavo di aver risolto invece col PHP non si smette mai di imparare. In primis, il controllo in __autoload tipo
è completamente inutile, come lo è il require_once.codice:if(!class_exists($className)){ // do stuff per gestire errori o altro }
__autoload viene chiamata proprio come ultima speranza, ergo se è chiamata la classe non esiste, ci sta poco da fare.
Un controllo rapido potrebbe essere un ...
Per le eccezioni ci sono vari metodi ma non tutti sono così fantastici.codice:if(file_exists($classDir.'/'.$className.'.class.php')){ // do stuff, carica la classe } else { // genera un eccezione o ferma tutto perchè non hai un file }
Io stesso proponevo di creare runtime la classe per estendere le eccezioni ma di fatto ci sono casi dove l'eval diventa il male e per queste delicate operazioni più che mai è bene non usarlo.
Una funzione facile facile quindi potrebbe essere questache grazie alla spl permette di avere più gestori ... sempre che questo abbia un senso nell'uso di tutti i giorni.codice:function autoloader($className){ static $classDir = 'classes/', $classPrefix = '', $classSuffix = '.class.php'; $classFile = $classDir.$classPrefix.$className.$classSuffix; $result = true; if(file_exists($classFile)) require $classFile; else { $result = false; trigger_error("Unable to load class {$className}. File {$classFile} does not exist.", E_USER_ERROR); } return $result; } spl_autoload_register("autoloader");
Chiamala pure __autoload e togli la spl se non ti piace.
Per concludere, questa funzione ci obbliga a salvare ogni classe in un file a parte.
Questa è una pratica comune in Java, meno famosa o ben vista in Python ed altri linguaggi, dove puoi creare più di una classe nello stesso file e/o namespace.
Il bello di questa funzione magica è che secondo me semplifica moltissimo la gestione dei requires ovunque tu sia nel tuo applicativo.
Unica cosa magari è dare un path assoluto o a partire dalla root alla statica $classDir.
Questa è la mia opinione a riguardo![]()


Rispondi quotando