Come creare classi figlio come configurazione principale?

2

Sto usando Codeigniter PHP Framework per lo sviluppo di un'applicazione web e, quando lo sviluppo di una zona di amministrazione, ho terminato la costruzione di una classe genitore generica chiamata AdminController che viene estesa dalle classi figlie per sviluppare le mie zone di amministrazione.

Ho accorciato il mio codice per mostrare ciò che voglio veramente mostrare , il mio codice è qualcosa del tipo:

Classe genitore:

class AdminController {

protected $url_action   = null;
protected $permissions  = null;
protected $formulario_gestion  = null;

function __construct() {
    if ( empty( $this->permissions ) ) {
        throw new Exception( 'No se ha definido permissions' );
    }
    if ( empty( $this->url_action ) ) {
        throw new Exception( 'No se ha definido la url_action' );
    }
    if ( empty( $this->formulario_gestion ) ) {
        throw new Exception( 'No se ha definido el formulario_gestion' );
    }
}

public function create() {
    if ( ! $this->checkPermissions( $this->permissions, $this->user ) { 
        redirect( base_url );  
    }

    $formulario = new $this->formulario_gestion( null );
    $formulario->setFormValues( $this->get_update_values() );

    // More code below...
}

// Doing this to make sure I'll overwrite it
public function get_update_values() {
    throw new Exception('No has definido get_update_values');
}

// More Methods and things...

E poi, io uso la mia classe figlia per avviare tutti i valori richiesti nel genitore, sovrascrivere tutte le funzioni che ho bisogno di dover sovrascrivere, e andare:

Classe figlio

class Webs extends AdminController {

function __construct() {

    // Initiating parent values:
    $this->permissions = 'webs';
    $this->url_action  = strtolower( __CLASS__) ;
    $this->formulario_gestion = 'FormularioWebs';

    parent::__construct();
}

// Overwriting what I need to be overwritten
public function get_update_values() {
     $values = $array(
         'field1' => 'value1'
     ,   'field2' => 'value2'
     );
     return $values;
}

E funziona abbastanza bene: tutte le pagine condividono lo stesso comportamento e scrivo solo codice pertinente.

Il mio problema è : questo è un incubo quando si costruisce un intero CRUD con esso: ho finito con molte proprietà che uso solo in alcuni metodi, e non so se c'è un " standard "o modo corretto di farlo. Voglio dire quali sono i difetti di fare questo in questo modo? È corretto?

Non mi piace che ci siano così tante proprietà che vengono utilizzate solo in un metodo, e non so come incapsularle in un modo che solo il metodo lo usa. Quello che ho finito è qualcosa come il codice a soffietto, ma non mi piace molto, dato che non sai in quale genitore viene dichiarato il valore.

Metodo nella classe genitore:

public function show() { 
    echo $this->var;
}

Metodo in Child Class:

public function show() {
     $this->vars = 'value'
     parent::show();
}
    
posta Chococroc 14.05.2014 - 20:24
fonte

0 risposte

Leggi altre domande sui tag