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

    [PHP] Istanza di una classe

    Ciao a tutti. Ho un problema con l'istanza di una classe. Forse è meglio che metto subito l'esempio.

    codice:
    <?php 
     class classA
     {
      function uno
      {
       ....
      }
    
      function due
      {
       ....
      }
     }
    
    ?>
    
    <?php
     require_once ("classA");
    
     class classB
     {
      
      $objclassA = new classA();
    
      function tre
      {
       $a = $objclassA->uno("ciao");
      }
    
      function quattro
      {
       $b = $objclassA->due("ciao");
      }
      
     }
    ?>
    Ho creato due classi, vorrei usare le funzioni della classe A nelle funzioni della classe B, ma sono costretto a istanziare l'oggetto della classe A in tutte le funzioni della classe B, mentre io vorrei fare una sola istanza dell'oggetto fuori dalle funzioni, come nell'esempio, ma mi da errore e non so perchè.
    Spero di essere riuscito a farmi capire.
    Ciao e grazie per l'aiuto
    Se la felicità è dietro l'angolo allora la mia vita è un cerchio. (Mario Muraro)

  2. #2
    puoi mettere l'instanza dell'oggetto A nel costruttore della classe B:
    Codice PHP:
    <?php

    class classB {
      
        var 
    $objclassA;
        
        function 
    classB(){
            
    $this->objclassA = new classA();
        }

        function 
    tre(){
            
    $a $this->objclassA->uno("ciao");
        }
        
        function 
    quattro(){
            
    $b $this->objclassA->due("ciao");
        }
      
    }

    ?>

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460
    Sembra che tu confonda il concetto di oggetto con quello di libreria di funzioni oppure che non ti sia chiaro il concetto di ereditarieta'.

    Molto brevemente: una classe deve normalmente rappresentare una entita' che vuoi rappresentare. Quando chiami un metodo di una istanza di una classe, dici a quella entita' di eseguire una certa operazione, tipicamente su se' stessa. Se invece devi eseguire una operazione "su di te", allora devi vedere se e' il caso che la classe che stai sviluppando sia legata alla classe da un legame di ereditarieta'.

    Il classico esempio e' questo:

    codice:
    class Person {
    
        private $name;
    
        public function getName() {
            return $name;
        }
    
        public function setName($newName) {
            $this->name = $newName;
    }
    
    class Employee extends Person {
        private $company;
    
        public function introduceYourself() {
            print("Hello, my name is " . $this->name . " and I work for " . $company);
        }
    }
    Se tu invece hai bisogno di chiamare un metodo generico, magari che effettua un calcolo, allora questo e' il caso dei cosiddetti metodi statici, ovvero slegati da una istanza specifica di una classe.

    codice:
    public class MathUtil {
        public static abs($value) {
            if ($value > 0)
                return $value;
            else
                return -$value;
        }
    }
    I metodi statici sono indispensabili ma e' necessario non abusarne, specie in un linguaggio come il PHP che non e' OOP.

    PS: La soluzione proposta e' terribile, a meno che l'oggetto 2 non sia una proprieta' dell'oggetto 1, nel qual caso va dichiarata come propreita' dell'oggetto 1.
    PS2: Inizia a utilizzare la terminologia giusta. Una classe ha dei metodi, non delle funzioni, anche se PHP ti obbliga a utilizzare la keyword function.
    There are 10 types of people in the world - those who understand binary and those who don't.

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.