Visualizzazione dei risultati da 1 a 8 su 8

Discussione: problemi di OOP

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107

    problemi di OOP

    Ciao!
    Ho un problema a livello di programmazione ad oggetti da cui non riesco a venirne fuori..ho creato una classe ClasseA al cui interno è definita la funzione functionA; questa funzione la vorrei richiamare all'interno di un'altra funzione functionB che ho definito in un'altra classe, che chiamo per semplicità ClasseB. Le due classi sono definite ciascuna su un file distinto ClassA.php e ClassB.php.
    Allora, ho pensato di fare così:

    Codice PHP:
    class ClassA {
      public function 
    functionA() {...}
    }

    class 
    ClassB extends ClassA {
      public function 
    functionB() {
        ...   
    $this->functionA() ...
      }

    in questo modo funziona..però non so se sia corretto estendere una classe (che contiene diverse funzioni) solo per usarne una.

    Allora, ho pensato di creare un'istanza della ClasseA all'interno del file ClasseB.php e richiamare la funzione che mi serve, cioè functionA. Così:

    Codice PHP:
    <?php
    require_once("\ClasseA.php");


    class 
    ClasseB {
      private 
    $istanzaA=new ClasseA();
      
      public function 
    functionB() {
         ... 
    $istanzaA->functionA();  ...
      }
    }
    ?>
    ma così mi dà errore "Parse error: parse error in ...".
    Non si può creare una variabile di classe (public, private o protected) che sia un'istanza di un'altra classe? è un errore/orrore madornale immagino!!

    come posso fare allora?

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107
    Originariamente inviato da filippo.toso
    Crea l'istanza nel costruttore.
    Grazie per la risposta Filippo!
    come posso fare? scusami ma sono alle prime armi...
    ho provato così, ma non funziona, mi dà errore: "Notice: Undefined variable: istanzaA in ..."

    Codice PHP:
    <?php
    require_once("ClasseA.php");

    class 
    ClasseB {

      private 
    $istanzaA;
      public function 
    __construct() {
        
    $this->istanzaA = new ClasseA(); 
      }

      public function 
    functionB() {
         ... 
    $istanzaA->functionA();  ...
      }
    }
    ?>

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107
    forse ho risolto...ma non so se è corretto...
    Ho usato l'operatore di risoluzione dell'ambito!
    ..almeno con quello funziona tutto, poi spero sia anche concettualmente corretto...così:

    Codice PHP:
    <?php
    require_once("\ClasseA.php"); 

    class 
    ClassB {
      public function 
    functionB() {
        ...
        
    $variabile ClasseA::functionA();    //  FUNZIONA!
        
    ...
      }
    }  
    ?>

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Codice PHP:
      public function functionB() {
         ... 
    $this->istanzaA->functionA();  ...
      } 
    Questa era la forma corretta.
    L'operatore di risoluzione dell'ambito potrà anche funzionare, ma per sapere se è concettualmente corretto bisognerebbe sapere come funzionano le tue classi

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107
    Originariamente inviato da luca200
    Codice PHP:
      public function functionB() {
         ... 
    $this->istanzaA->functionA();  ...
      } 
    Questa era la forma corretta.
    L'operatore di risoluzione dell'ambito potrà anche funzionare, ma per sapere se è concettualmente corretto bisognerebbe sapere come funzionano le tue classi
    Sì, in effetti funziona anche come dici tu!
    in che senso come funzionano le mie classi?? ..non lo so neanche io!
    Dato che sono alle prime armi, le mie classi sono semplici, nel senso che invece di scrivere tanto codice nelle pagine principali (tipo index.php) creo delle funzioni che poi vado a richiamare nelle varie pagine..è solo per risparmiare codice e per chiarezza essenzialmente.
    Quindi, quale sarebbe secondo te la forma più corretta?
    Creare un'istanza di una classe e usarla oppure tramite l'operatore di risoluzione dell'ambito?
    grazie mille per la risposta e la disponibilità, intanto!

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    143
    Originariamente inviato da pape86
    Dato che sono alle prime armi, le mie classi sono semplici, nel senso che invece di scrivere tanto codice nelle pagine principali (tipo index.php) creo delle funzioni che poi vado a richiamare nelle varie pagine..è solo per risparmiare codice e per chiarezza essenzialmente.
    Un consiglio: questo modo di pensare non é per niente OOP, le tue sembrano le classiche funzioni.
    La tua prima affermazione 'però non so se sia corretto estendere una classe (che contiene diverse funzioni) solo per usarne una', lo conferma.
    Non é una critica, bada bene, sono consigli.
    Prima di tutto le classi hanno metodi e proprietá, non funzioni.
    Se abbia senso estendere una classe per usarne un solo metodo, dipende da che classe.
    Ti faccio un esempio: ha senso che la classe Aereo estenda la classe Uccello, per usare il metodo Volare() ?
    Ha invece senso estendere che la classe Gabbiano estenda la classe Uccello?
    Per iniziare a programmare OOP dovresti cercare di capire concetti fondamentali quali astrazione, incapsulamento, ereditarietá e polimorfismo.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107
    Originariamente inviato da kiboo
    Un consiglio: questo modo di pensare non é per niente OOP, le tue sembrano le classiche funzioni.
    La tua prima affermazione 'però non so se sia corretto estendere una classe (che contiene diverse funzioni) solo per usarne una', lo conferma.
    Non é una critica, bada bene, sono consigli.
    Prima di tutto le classi hanno metodi e proprietá, non funzioni.
    Se abbia senso estendere una classe per usarne un solo metodo, dipende da che classe.
    Ti faccio un esempio: ha senso che la classe Aereo estenda la classe Uccello, per usare il metodo Volare() ?
    Ha invece senso estendere che la classe Gabbiano estenda la classe Uccello?
    Per iniziare a programmare OOP dovresti cercare di capire concetti fondamentali quali astrazione, incapsulamento, ereditarietá e polimorfismo.
    Ciao kiboo!
    grazie...consigli stra-accettati volentieri!!!
    in effetti non è corretto parlare di OOP nel mio caso..però quello che intendevo dire è che, essendo alle prime armi con la programmazione php (o cmq per il web), ed avendo studiato all'univ solo Java, mi trovo meglio a creare dei file (che poi sono delle classi, alla fine) in cui definisco il comportamento di alcune funzioni (metodi) che vado a richiamare nelle mie pagine del sito, senza dover in ciascuna di queste ricopiare tutto il codice. Questo, per risparmiare tempo, codice, e per chiarezza. Poi, ripeto, essendo alle prime armi, il mio caso non rientra in una buona programmazione ad oggetti, visto che non ho creato interfacce, classi astratte, né affrontato il discorso di ereditarietà e polimorfismo...ma questo penso sia prematuro ed eccessivo per la semplicità del mio sito.
    In ogni caso, ti ringrazio veramente per questo tuo appunto!

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.