Visualizzazione risultati 1 fino 6 di 6

Discussione: Classi ed ereditarietà: come definire metodi ominimi?

  1. #1
    Guest

    Predefinito Classi ed ereditarietà: come definire metodi ominimi?

    Ho una classe principale in cui ho definito un metodo per la creazione delle stringhe in base a dei parametri.

    Poi ho un'altra classe che estende la prima, che ha un metodo ominimo, ma che riceve dei parametri diversi in modo da poter creare diversamente la stringa; in pratica il metodo si adatta in base alla classe in cui viene definita.

    E' così:
    Codice PHP:
    class _Class
    {
    var
    $subclass;

    function
    __construct(array $array, array $array_2= array(), string $string = null)
    {
    # __construct
    }

    function
    make($array, array $array_2 = array())
    {
    $url = 'bla bla bla';
    return
    $url;
    }
    }

    class
    Sub_Class extends _Class
    {
    function
    make($array, array $array_2 = array(), array $array_3 = array(), array $array_4 = array())
    {
    $url = 'bla bla bla';
    return
    $url;
    }
    }

    $class = new _Class(array('blah', 'blah'));
    Poi includo un altro file:
    Codice PHP:
    $class->sub= new Sub_Class;
    Ma mi viene restituito:
    Codice:
    Argument 1 passed to Urls::__construct() must be an array, none given
    Se la classe è inizializzata prima del file incluso, perché mi viene restituito questo errore?

    Grazie in anticipo

  2. #2
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    La classe eredita Tutto, anche il costruttore, e va in overload(in php penso solo override) della funzione make.

    Quando fai "new Sub_Class;" ti dice semplcemente che devi passargli un array come hai fatto per
    "new _Class(array('blah', 'blah'))"
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  3. #3
    Guest

    Predefinito

    Ed allora come potrei fare per evitare ciò? Come potrei strutturare le classi per fare in modo che quella madre abbia delle funzioni, ma rimangano ominime, ma richiamabili?

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,692

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Ed allora come potrei fare per evitare ciò? Come potrei strutturare le classi per fare in modo che quella madre abbia delle funzioni, ma rimangano ominime, ma richiamabili?
    Ma scusa.. allora PHP come fa a capire quale dei 2 metodi invocare?? (cioè, invoca sempre quello "ereditato", credo)...

    (non ho mai programmato nulla di serio in OPP: non so se funziona), ma prova ad aggiungere un parametro di ingresso nel metodo "esteso" (aggiungendo ad esempio un "1" se vuoi richiamare il metodo "esteso")...

    Una cosa del genere:

    Codice PHP:
    class Sub_Class extends _Class
    {
    function
    make($array, array $array_2 = array(), array $array_3 = array(), array $array_4 = array(),$a)
    {
    $url = 'bla bla bla';
    return
    $url;
    }
    }
    p.s: non è molto elegante come soluzione, e potrei anche aver detto una cavolata...

    Ciao!

    EDIT:

    ehm.. mi son accorto che i parametri di ingresso sono già differenti, quindi ho veramente detto una cavolata (in java però avrebbe funzionato!).
    Ultima modifica di alemoppo : 03-06-2011 alle ore 17.07.12

  5. #5
    Guest

    Predefinito

    Dovrebbe capirlo perché inizializzi due classi diverse in objects diversi. Questo problema non me lo da se nella classe madre non forso l'inserimento di un array, quindi pensavo ci fosse un modo per poter estendere la classe madre in base alle esigenze data la pagina, avendo gli stessi modi per poter richiamare il metodo adatto, ma dalla classe apposita!

  6. #6
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Ed allora come potrei fare per evitare ciò? Come potrei strutturare le classi per fare in modo che quella madre abbia delle funzioni, ma rimangano ominime, ma richiamabili?
    Quindi vuoi mantenere make(parametro) e make(parametro, parametro)?

    Questo si chiama overloading.
    Ed in php non esiste, si può però emulare con chiamate dinamiche(ma non so da classe ereditata).
    Cerca "overloading PHP".

    Cmq l'errore di prima non aveva nulla a che fare con questo problema.
    Per risolverlo ...dagli un altro nome, makeBase, di fatto l'overloading alla fine è indispensabile solo in alcuni casi.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •