Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [OOP] classe con due costruttori

    Ciao ragazzi, è possibile in php avere una sorta di overloading del costruttore? Per meglio dire, se istanzio un oggetto come

    oggetto(a)

    otterrò un oggetto con un certo tipo di metodi, se invece vado con

    oggetto(a,b)

    ne avrò un altro con metodi/funzioni diverse.
    Potrebbe trattarsi di classi astratte?

  2. #2
    oggetto(a)

    otterrò un oggetto con un certo tipo di metodi, se invece vado con

    oggetto(a,b)

    ne avrò un altro con metodi/funzioni diverse.
    Devono essere classi diverse se i metodi saranno diversi.

  3. #3
    Ciao filippo.toso

    Proprio ora ho trovato delle info e l'inheritance è quello che potrebbe fare al caso mio, ma è probabile che si applichi solo ai metodi e non ai costruttori.
    Adesso provo, poi documento

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Dipende da cosa deve fare il tuo metodo

    per esempio, avendo due metodi con nome identico ma diversi argomenti,
    crei il primo metodo in una classe
    crei il secondo in una sottoclasse che estende la prima (super)classe e richiama il suo metodo,

    in questo modo puoi provare a riutilizzare parte del codice, qualcosa del tipo

    codice:
    <?php
    
    class A {
       public function metodo($a) {
          echo "Questo e' {$a} 
    <hr />";
          // fai qualcosa con $a
      }
    }
    
    class B extends A {
       public function metodo($a, $b) {
          echo "Questo e' {$b} 
    ";
          // fai qualcosa con $b
          parent::metodo($a);
      }
    }
    
    
    $myA = new A();
    $myB = new B();
    
    $myA->metodo('A');
    $myB->metodo('A','B');
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    Originariamente inviato da fcaldera
    Dipende da cosa deve fare il tuo metodo

    per esempio, avendo due metodi con nome identico ma diversi argomenti,
    crei il primo metodo in una classe
    crei il secondo in una sottoclasse che estende la prima (super)classe e richiama il suo metodo,

    in questo modo puoi provare a riutilizzare parte del codice, qualcosa del tipo

    codice:
    <?php
    
    class A {
       public function metodo($a) {
          echo "Questo e' {$a} 
    <hr />";
          // fai qualcosa con $a
      }
    }
    
    class B extends A {
       public function metodo($a, $b) {
          echo "Questo e' {$b} 
    ";
          // fai qualcosa con $b
          parent::metodo($a);
      }
    }
    
    
    $myA = new A();
    $myB = new B();
    
    $myA->metodo('A');
    $myB->metodo('A','B');
    Attenzione perchè se usi STRICT hai questo
    warning:
    Codice PHP:
    Strict standardsDeclaration of B::metodo() should be compatible with that of A::metodo() 
    per la mia esperienza se fai una cosa
    come quella proposta sbagli qc nella
    relazione delle classi.
    L'unico modo di non aver warning è
    aggiungere il nuovo parametro nel costruttore.

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  6. #6

    Re: [OOP] classe con due costruttori

    Originariamente inviato da Tobler
    se invece vado con

    oggetto(a,b)

    ne avrò un altro con metodi/funzioni diverse.
    Quello che ti serve è una factory, ovvero istanziare l'oggetto non tramite new ma tramite un'altra funzione (membro di una classe che si chiama factory, fabbrica) che restituisca l'oggetto della classe appropriata. Questo perché new restituisce sempre un'istanza della classe specificata, mentre a te ne servono due diverse, in quanto i metodi come hai detto dovranno essere diversi...

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.