Problema per l'istanza degli oggetti di diverse classi

Sto provando a sviluppare un progetto in modo da avere diverse classi specializzate a fare qualcosa:

gestione utenti

 - classe utenti ( login, logout , registrazione )

 poi diverse sottoclassi per la suddivisione dei permessi dei vari utenti

 - classe admin

 - classe visitatore

 - classe registrato

gestione transazioni

gestione immagini

 - classe immagini ( upload , elimina dal database )

 - classe watermark

gestione database

 - classe db ( wrapper funzioni di mysql )

gestione errori

 - classe errors ( notifica e log di errori )

gestione moduli

 - classe moduli ( upload e caricamento dei moduli )

ora che ho tutti questi "moduli" devo scrivere una classe principale e istanziare un'oggetto della classe che userò nei metodi nei quali è richiesto e poi distruggerlo alla fine del metodo o istanziare tutte le classi nel costruttore della classe principale?

I file delle classi devo includerli tutti nel costruttore o devo includerli ogni volta che mi servono ?

 :P

 :bye:

inviato 9 anni fa
Andrea Turso
Andrea Turso
86
modificato 9 anni fa
X 0 X

I file delle classi vanno inclusi una volta sola, altrimenti ricevi un errore.

Puoi istanziare all'inizio dello script tutti gli oggetti che sai di dover utilizzare sicuramente durante l'esecuzione della pagina. Quelli che invece usi solo in particolari circostanze ti conviene isanziarli "on demand"

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

quindi includo tutto all'inizio e poi istanzio dove mi serve?

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
quindi includo tutto all'inizio e poi istanzio dove mi serve?

usi PHP 5? Se si, conosci __autoload?

http://it.php.net/autoload

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Gianni io vorrei evitare di fare cose del genere :

<?php
$obj = new ClasseCheMiServe();
$obj2 = new AltraClasseCheMiServeInQuestoFile();
$obj->foo();
?>

[resto html]

caricare i file che mi servono nei vari file .php e poi usarle,ma vorrei gestire tutto da dentro una classe ... cioè avere una classe principale che possa raggruppare tutte le altre classi ed utilizzarle solo quando mi serve, questa cosa pensavo di farla così :

tutte le classi divise per cosa fanno ( gestione utenti, gestione immagini, gestione transazioni ) includerle nel file core.php e poi usarle nei metodi dove servono :

core.php :

inclusione di tutte le classi ( ma non si rischia di includere anche le classi che non servono ? )

class ... 
{
public function doSomething()
{
          $images = new Image;
          //fa qualcosa con l'immagine
return;
}

public function altro()
{
        $transazione = new transazione('paypal');
        //codice chennesò
return;
}
}

l'autoload mi risolve questo problema ?

ma il dubbio più grande : è corretto il metodo che sto utilizzando, se no , ce ne sono altri che mi permettano di dividere il codice in tante classi specializzate e una che le utilizza ?

 :bye:

tutto questo è solo l'inizio, pensa che vorrei renderlo utilizzabile con plugins aahhahaha

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
modificato 9 anni fa
X 0 X

Il voler creare una classe che usa le altre mi sembra una forzatura. Non ne vedo l'utilità.

L'autoload ti evita semplicemente di fare le include.

 :bye:

 

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Se usi PHP5 puoi sfruttare il design patter Singleton per progettare la tua classe:

(a questo link ne parlano http://php.html.it/articoli/leggi/2004/design-pattern-in-php-singleton/)

detta in breve crei una classe con un metodo static che all'occorrenza include il file della classe che ti serve e crea l'oggetto.

Avevo un problema simile al tuo e l'ho risolto in questo modo.

di seguito il codice della mia classe, può essere uno spunto

<?

class dbcon{

   private static $drivers = array("mysql" => "1", "sqllite" => "2");

   function connessione($parametri) {

      include_once(dir_lib."/dbcon/oodb.lib");            

      $a_driver = explode("://",$parametri);

      switch(self::$drivers[$a_driver[0]]){

         case "1":

            include_once(dir_lib."/dbcon/oomysqli.lib");         

            return new oomysqli($a_driver[1]);

            break;

         case "2":

            include_once(dir_lib."/dbcon/oosqllite.lib");

            return new oosqllite($a_driver[1]);

            break;

         default:

            print("Driver non supportato");

            break;

      }

   }

}//Fine classe

poi richiamo in questo modo:

$$nome_var = dbcon::connessione($vdb);

e in base al valore di $vdb mi crea l'oggetto che mi serve

risposto 9 anni fa
Fabiopsy
X 0 X

ops....scusate per l'errore nel inserire il codice, ho dimenticato di inserire i tag code. è il pattern da usare è il Factory

a questo link: http://php.html.it/articoli/leggi/1924/design-pattern-in-php-factory/ ho provato a modificare il post ma non c'è il tasto

risposto 9 anni fa
Fabiopsy
modificato 9 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda