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

    oggetti come parametri di funzioni di altri oggetti

    Allora, vediamo un po' come mi posso spiegare cerco di farlo con un esempio:

    ho una classe che inizializza il database e la istanzio così:

    Codice PHP:
     $data = new db_init
    Ora, ho ad esempio un'altra classe per la gestione della tabella contenente i dati degli utenti;
    poiché alcune funzioni della classe user_init fanno uso delle funzioni della classe db_init, come fanno le funzioni della prima ad accedere a quelle della seconda?
    Ho pensato di passare per reference (so che php5 lo fa senza bisogno dell'operatore & ) l'oggetto istanza della classe db_init al costruttore di user_init:

    Codice PHP:
    class user_init
    {
        private 
    $mydata;

        public function 
    __construct($d)
       {
            
    $this->mydata $d;
       } 
    che poi inizializzo così:

    Codice PHP:

    $data 
    = new db_init;

    $user = new user_init($data); 
    In questo modo tramite $this->mydata->funzione_di_esempio() posso accedere alle funzioni della classe db_init dalla classe user_init.

    La mia domanda è: è questa la procedura "corretta"? Oppure esistono metodi più efficaci per far interagire le varie classi?

    Lo chiedo perché ho altre classi che interagiscono tra loro e sono tante, e diventa un po' scomodo per chi utilizzerà lo script creare gli oggetti di ogni classe e passare tali oggetti per reference a tutte le classi che ne hanno bisogno, tutto in base alle funzioni che vorrà utilizzare.
    Non è possibile ad esempio creare una diversa istanza di un oggetto all'interno di ogni classe, eliminando così la necessità di passare per reference, ad ogni costruttore, un oggetto creato in precedenza?
    Cioé se nel mio esempio mi servisse di utilizzare le funzioni della classe db_init all'interno della classe user_init, non potrei semplicemente creare una nuova istanza di db_init all'interno della classe user init? Ve lo chiedo perché se ci provo mi da errore.
    Capisco poi che, anche se fosse possibile, mi ritroverei con vari oggetti della stessa classe, ognuno autonomo e ognuno con variabili con contenuto diverso, e questo in alcuni casi pregiudicherebbe l'utilità della classe.

    Insomma voi professionisti come fate? Ho provato a creare un unico file da includere, con tutte le classi istanziate, in modo che chi andrà ad utilizzare gli script non debba andarsi a vedere quali classi necessitano degli oggetti in reference per i propri costruttori, ma possa limitarsi ad includere un file e utilizzare le funzioni delle classi che gli servono.
    Infatti la mia preoccupazione maggiore è che, chi andrà ad utilizzare lo script, debba essere obbligato a istanziare le varie classi utilizzate da una determinata classe, anche se a questo ipotetico "utilizzatore finale" serve solo quest'ultima classe, e non ha idea ne tantomeno voglia di andarsi a vedere quali oggetti sono utilizzati da questa classe e andare a crearli e passarli per reference a quella che infondo sarà l'unica classe che utilizzerà.

    Questo è un approccio giusto? Qual'è il modo migliore perché una classe utilizzi l'oggetto di un'altra classe richiedendo meno passaggi possibili da parte di chi userà gli script?
    Magari creare questi oggetti all'interno dello stesso file della classe che li necessita, e poi creare una funzione che istanzi la classe in automatico passando tali oggetti al suo costruttore, cosicché l'utilizzatore finale possa limitarsi semplicemente a richiamare questa funzione?

    Grazie per l'attenzione e scusate per la domanda "sconclusionata"

  2. #2
    Ok, ho risolto, stupidamente creavo gli oggetti all'interno della classe dove vengono dichiarate le variabili Ho risolto creando gli oggetti all'interno del costruttore, e limitandomi a passare per reference solo quelli che devono essere univoci per tutti gli script (credo si dica "globali"?).
    Comunque ogni ulteriore consiglio a riguardo è ben accetto, e scusate per il post inutile

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.