2013-03-16 16 views
6

Sono ancora un po 'nuovo alle tecniche di programmazione OO PHP e ho una domanda molto semplice, è generalmente una cattiva pratica istanziare una classe in una classe e poi passare quell'istanza in un'altra classe?PHP Passare un'istanza di una classe in un'altra classe

Quello che voglio è essere in grado di creare un'istanza di una classe specifica che so che avrò sempre bisogno attraverso ogni richiesta dell'utente. La seconda classe è più che altro una classe di supporto, idealmente nella mia applicazione sarebbe un "caricatore" che carica le visualizzazioni.

prima classe che chiama le altre due classi:

require 'classTwo.php'; 
require 'classThree.php'; 

class first { 
    public $classTwo, $classThree; 

    public function __construct() { 
      $this -> classTwo = new classTwo; 
      $this -> classThree = new classThree; 

      $this -> classThree -> displayNum($this -> classTwo); 

    } 
} 

Seconda classe, che è la classe helper:

class classTwo { 
    public function returnVal() { 
      return 123; 
    } 
} 

Terza classe è la classe di azione in cui lavoro effettivo e visualizzazione finale sarebbe accaduto:

class classThree { 
    public function displayNum($instance) { 
      echo $instance -> returnVal(); 
    } 
} 

Nel complesso voglio solo sapere se questa è una pratica sbagliata perché non ho mai visto fatto prima.

Grazie in anticipo!

+1

upvoted dal momento che è una buona domanda da chiedere e ho voluto che avevo chiesto queste domande quando Ho iniziato per la prima volta OOP. Una volta che hai familiarizzato con l'iniezione di dipendenza che il link nella risposta di Jaitsu copre bene, ti consiglio di dare un'occhiata a [Pimple] (http://pimple.sensiolabs.org/), che è un contenitore DI per tutte le tue classi e parametri. –

+0

Grazie a Adam-E sono assolutamente d'accordo e ho lavorato e letto abbastanza tecniche di OO PHP e non ho mai visto il metodo che stavo usando prima e ho pensato a chi chiedere meglio degli utenti di Stack Overflow che trovo sempre molto utili. Sicuramente guarderò in Pimple grazie! –

risposta

8

È buona norma iniettare qualsiasi oggetto dipendente, in quanto ciò consente di simulare facilmente durante il test dell'unità.

In generale, se avete ClassA e si basa su un'istanza di ClassB a funzionare allora si potrebbe fare qualcosa di simile ..

$objectB = new ClassB(); 
$objectA = new ClassA($objectB); 

Date un'occhiata a http://net.tutsplus.com/tutorials/php/dependency-injection-in-php/

EDIT: iniezione Constructor è passare la dipendenza nel costruttore del nuovo oggetto (come dimostrato sopra).

iniezione Setter utilizza un metodo per impostare la dipendenza, e di solito è utilizzata quando la dipendenza non è critica:

$objectB = new ClassB(); 
$objectA = new ClassA(); 
$objectA->setObjectB($objectB); 
+0

Grazie mille @Jaitsu, puoi dirmi però perché è meglio passare l'istanza dall'istanza piuttosto che da un metodo. –

+0

@TomBird Esistono due tipi di iniezione, iniezione setter e iniezione costruttore. Di solito se la dipendenza è facoltativa, si usa l'iniezione setter, ma se l'oggetto * deve * ricevere un'istanza di un altro oggetto per funzionare allora utilizzare l'iniezione del costruttore – JamesHalsall

2

Sì. Ciò renderebbe difficile testare la tua classe first perché ci sono delle dipendenze codificate in esso.

Iniettare le istanze delle classi o iniettare una fabbrica.

Problemi correlati