Molti-a-molti in OOP: la classe A istanzia la classe B, che istanzia la classe A, che

3

Sto mappando Field1 a Field2. L'oggetto mappa crea un'istanza dell'oggetto campo e viceversa, creando un loop infinito.

Questo è in PHP.

class field {
  protected $maps; // mapCollection object. all the mappings of this field to others

}

class map {
  protected $field1; // field object
  protected $field2; // field object
}

class mapCollection {
  protected $maps; // array of map objects
}

Le mappature e i set di campi sono memorizzati in un database in cui hanno un ID univoco. Così ho deciso di consentire il loro recupero usando i loro id nei costruttori.

class field {
  protected $maps; // map object
  public __construct($id = 0 ) {
    if(!empty($id) ) {
      $this->maps = // get mapsCollection. data from db
    }
  }

}

class map {
  protected $field1; // field object
  protected $field2; // field object
  public __construct($id = 0 ) {
    if(!empty($id) ) {
      $this->field1 = // get field1 data from db
      $this->field2 = // get field2 data from db
    }
  }
}

class mapCollection {
  protected $maps; // array of map objects
  public __construct($field_id) {
    // get maps from db by field id
    foreach($dbdata as $map_id) {
      $this->maps[] = new map($map_id); // instantiates new map, which instantiates new field, etc
    }
  }
}

Come devo fare questo?

    
posta Buttle Butkus 14.05.2014 - 22:04
fonte

1 risposta

4

Si chiama dipendenza circolare. In genere, il modo in cui li risolvi è che una terza parte imparziale crea sia A che B quindi li introduce l'un l'altro. Questo dovrebbe interrompere il ciclo infinito e permettere alle cose di progredire.

Un'altra opzione è dare al tuo campo e alla classe map un costruttore che prende l'altro oggetto come parametro. Ora carica solo dal database se non ottieni ciò che stai cercando passato

    
risposta data 14.05.2014 - 23:45
fonte

Leggi altre domande sui tag