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

    Porting di programmi Java in php

    Ciao a tutti!
    Ho necessità di fare il porting in php di programmi Java e volevo sapere se il php prevede la creazione di oggetti con astrazione di tipo, quello che in java si chiama "Java generics" e in c++ si chiama "template".
    In pratica: ho la possibilità in php di creare un oggetto così:

    class MyObject<tipo> lista

    e poi instanziarlo così:

    MyObject<string> lista

    oppure
    MyObject<anagrafica> lista

    Ovviamente con la sintassi corretta...

    Spero di essere stato chiaro.
    Grazie
    Non hai capito davvero qualcosa, finchè non sei in grado di spiegarlo a tua nonna. (Albert Einstein)

  2. #2
    no, non puoi, perché php non è "debolmente" tipizzato, ovvero i tipi ci sono ma non ci sono

    I Generics (o Templates) sono necessari in Java/C#/C++ perché sono linguaggi fortemente tipizzati che vengono compilati e quindi le dipendenze risolte in fase di compilazione mentre php viene "compilato" in fase di runtime e le dipendenze vengono risolte man mano che si presentano il che significa che se devi operare su una classe ben precisa ... a te non interessa nulla se non che abbia quei specifici metodi

    Molto semplicemente al costruttore, o tramite un metodo, passi il "tipo" da instanziare (se devi instanziarlo all'interno della classe che ti serve) o alternativamente passi direttamente l'oggetto già instanziato

    per intenderci

    codice:
    class TestA
    {
      public function Print()
      {
        echo "print AAA
    ";
      }
    }
    
    class TestB
    {
      public function Print()
      {
        echo "print BBB
    ";
      }
    }
    
    class TestGenerics
    {
      private $object;
    
      public function __construct($Type)
      {
        $this->object = new $Type();
      }
    
      public function DoJob()
      {
        $this->object->Print();
      }
    }
    
    $testA = new TestGenerics('TestA');
    $testA->DoJob();
    
    $testB = new TestGenerics('TestB');
    $testB->DoJob();

    aggiungendo l'interfaccia ...

    [code]

    codice:
    interface ITest
    {
      public function Print();
    }
    
    class TestA : ITest
    {
      public function Print()
      {
        echo "print AAA
    ";
      }
    }
    
    class TestB : ITest
    {
      public function Print()
      {
        echo "print BBB
    ";
      }
    }
    
    class TestGenerics
    {
      private $object;
    
      public function __construct($Type)
      {
        if (is_subclass_of($Type, 'ITest') === false)
        {
          throw new exception("Class " . $Type . " doesn't implement ITest interface");
        }
        $this->object = new $Type();
      }
    
      public function DoJob()
      {
        $this->object->Print();
      }
    }
    
    $testA = new TestGenerics('TestA');
    $testA->DoJob();
    
    $testB = new TestGenerics('TestB');
    $testB->DoJob();
    non commento il codice, ma penso tu lo capisca perfettamente
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Se posso aggiungere i miei 2 centesimi, direi che i generics di java non sono la stessa cosa rispetto ai templates di c++

  4. #4
    Innanzitutto grazie per le risposte.
    Per Daniele_dll: si il codice è chiaro... devo solo fare un po' di prove serie e capire dove possono sorgere problemi.

    Per bubi1: be'... si le differenze ci sono... però io le ho usate entrambe senza problemi ( vuoi mettere la comodità di istanziare indifferentemente un albero di interi o uno di anagrafiche senza mettere mano al codice?).

    Comunque se ho problemi mi rifaccio sentire.
    Ciao e grazie.
    Non hai capito davvero qualcosa, finchè non sei in grado di spiegarlo a tua nonna. (Albert Einstein)

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.