Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537

    Overloading del costruttore

    Salve a tutti,
    venendo dal Java sono rimasto un po sorpreso dal fatto che in php non posso dichiarare più costruttori in una classe.
    A me servirebbe una cosa del genere:
    Codice PHP:
    public class Azienda{

    private 
    $id;
    private 
    $nome;
    private 
    $indirizzo;

    public function 
    __constructor(){}

    public function 
    __contructor($id$nome$indirizzo){
    $this->id $id;
    $this->nome $nome;
    $this->indirizzo $indirizzo;

    public function 
    getListaAziende(){}

    // Estraggo dal db i dati
    $arrayAziende dbController::getAziende();
    $listaAziende;

    foreach(
    $arrayAziende as $azienda){
      
    array_push($listaAziende, new Azienda($azienda['id'], $azienda['nome']....));
    }

    return 
    $listaAziende;
    }


    Potete capire che se mi serve una lista di Aziende la chiamata sarà
    Codice PHP:
    $azienda = new Azienda();
    $listaAziende $azienda->getListaAziende(); 
    ma non posso farlo poichè il costruttore deve essere unico.

    Ma da notare che all'interno del metodo faccio new Azienda(parametri).
    dunque tutto e vano, come posso risolvere???

    P.s. Perdonatemi se il codice ha degli errori ma l'ho scritto ora al volo qui nella TextArea senza controllare, ma il senso dovrebbe essere chiaro.

  2. #2
    anche io vengo da java non devi usare __costruct, ma come si faceva prima usando il nome della classe con lettera maiuscola come costruttore!
    ciao

  3. #3
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Originariamente inviato da urukappa
    anche io vengo da java non devi usare __costruct, ma come si faceva prima usando il nome della classe con lettera maiuscola come costruttore!
    ciao
    In PHP4, una decina di anni fa si faceva così.

    In PHP5 il costruttore è

    Codice PHP:
    __construct() 
    a cui puoi passare degli argomenti come per qualsiasi altro metodo, nel tuo caso

    Codice PHP:
    public function __construct($id$nome$indirizzo
    {
        
    $this->id $id;
        
    $this->nome $nome;
        
    $this->indirizzo $indirizzo

    che tra l'altro è quello che hai fatto tu sbagliando solo il nome del costruttore.
    Come mai avresti voluto quell'altro costruttore vuoto? A cosa ti dovrebbe servire?

    Ciao

  4. #4
    Ciao, puoi dare dei valori di default ai parametri che passi nel costruttore:
    Codice PHP:
    <?php

    class Azienda{
         private 
    $id
         private 
    $nome
         private 
    $indirizzo
         
         function 
    __construct($id=""$nome=""$indirizzo=""){
                 
    $this->id $id;
                 
    $this->nome $nome;
                 
    $this->indirizzo $indirizzo;
         }
    }
    ?>
    In questo modo quando dichiari $azienda = new Azienda(); gli passerai i valori che hai definito come default nel costruttore.

  5. #5
    Utente di HTML.it L'avatar di wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537
    Si in effetti il nome del costruttore è errato ma come ho detto ho scritto codice al volo, ma non è quello il problema.
    Come mai avresti voluto quell'altro costruttore vuoto? A cosa ti dovrebbe servire?
    Se ci fai caso se io voglio una lista di aziende la chiamata come ho scritto sopra dovrebbe essere
    Codice PHP:
    $azienda = new Azienda(); 
    $listaAziende $azienda->getListaAziende(); 
    come puoi notare se chiedo una lista aziende è perchè non le possiedo quindi come potrei passare i parametri al costruttore?

  6. #6
    Utente di HTML.it L'avatar di wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537
    Originariamente inviato da albx87
    Ciao, puoi dare dei valori di default ai parametri che passi nel costruttore:
    Codice PHP:
    <?php

    class Azienda{
         private 
    $id
         private 
    $nome
         private 
    $indirizzo
         
         function 
    __construct($id=""$nome=""$indirizzo=""){
                 
    $this->id $id;
                 
    $this->nome $nome;
                 
    $this->indirizzo $indirizzo;
         }
    }
    ?>
    In questo modo quando dichiari $azienda = new Azienda(); gli passerai i valori che hai definito come default nel costruttore.
    Ok mi sembra una buona soluzione, ora vedo se funziona.
    Grazie ciao ciao.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    La soluzione più giusta per te anche secondo me può essere questa:

    Originariamente inviato da albx87
    Ciao, puoi dare dei valori di default ai parametri che passi nel costruttore:
    Codice PHP:
    <?php

    class Azienda{
         private 
    $id
         private 
    $nome
         private 
    $indirizzo
         
         function 
    __construct($id=""$nome=""$indirizzo=""){
                 
    $this->id $id;
                 
    $this->nome $nome;
                 
    $this->indirizzo $indirizzo;
         }
    }
    ?>
    In questo modo quando dichiari $azienda = new Azienda(); gli passerai i valori che hai definito come default nel costruttore.
    All'interno del costruttore puoi verificare se e quali sono i parametri passati. Puoi anche non definirne alcuno nella firma e recuperarli con la funzione apposita func_get_args.

  8. #8
    Utente di HTML.it L'avatar di wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537
    Originariamente inviato da wino_7
    Ok mi sembra una buona soluzione, ora vedo se funziona.
    Grazie ciao ciao.
    Provato e funziona benissimo,
    l'unica modifica è che al posto di mettere i doppi apici ho inserito null.
    Può esserci qualche effetto collaterale?
    Grazie mille sia a albx87 che eiyen.

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    come valore di default puoi scegliere quello che ritieni più opportuno... quindi è una tua scelta... da un punto di vista concettuale NULL forse - nel tuo caso - è più corretto... l'importante è che poi fai i controlli in maniera opportuna (potresti anche usare "false")

  10. #10
    Utente di HTML.it L'avatar di wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537
    Originariamente inviato da eiyen
    come valore di default puoi scegliere quello che ritieni più opportuno... quindi è una tua scelta... da un punto di vista concettuale NULL forse - nel tuo caso - è più corretto... l'importante è che poi fai i controlli in maniera opportuna (potresti anche usare "false")
    Ok aggiudicato!!
    Cmq grazie anche per la perla del func_get_args

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.