Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di henry78
    Registrato dal
    May 2001
    Messaggi
    1,264

    Passare array da classe principale a sottoclassi

    Ciao a tutti

    Sto veramente faticando per capire come risolvere una questione che mi pare banale... eppure!

    Esempio:

    class myClass {

    var $lang = 'en';
    var $translations = array();

    public function __construct($lang,$translations = array()) {
    $this->lang = $lang;
    $this->array_translations = $translations;
    }

    public function foo() {
    echo $this->lang;
    echo $this->array_translations['55'];
    }
    }


    class myClass2 extends myClass {
    public function __construct() {
    }


    public function foo2() {
    echo $this->lang;
    echo $this->array_translations['55'];
    }

    }


    $class = new myClass($lang,$translations);

    $class2 = new myClass2();
    $class2->foo2();


    Il metodo foo2 mi stampa perfettamente $this->lang ma non il contenuto dell'array... com'e' possibile? Semplicemente vorrei definire la classe principale passandogli l'array con le traduzioni per poterlo usare con le sottoclassi.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    $class e $class2 non hanno alcuna relazione, sono due cose diverse.

    Per instanziare correttamente la class2 dovresti fare

    $class2 = new myClass2($lang,$translations);

  3. #3
    Utente di HTML.it L'avatar di henry78
    Registrato dal
    May 2001
    Messaggi
    1,264
    Originariamente inviato da Alhazred
    $class e $class2 non hanno alcuna relazione, sono due cose diverse.

    Per instanziare correttamente la class2 dovresti fare

    $class2 = new myClass2($lang,$translations);
    quindi la soluzione sarebbe ripassare ogni volta l'array con le traduzioni?

    Facciamo un esempio, la classe principale è "utenti" e la sottoclasse è "preferiti".
    Utenti contiene tutte le informazioni degli utenti (età, provenienza, nome, cognome) e i suoi metodi si occupano di gestire queste informazioni.

    Ho poi una sottoclasse "preferiti" che estende "utenti"; preferiti si occupa di gestire le preferenze degli utenti e mi pare che a livello di progettazione sia meglio avere questi metodi separati. La classe "utenti" la richiamo in ogni pagina del sito, mentre preferiti solo dove voglio mostrare i preferiti. Non mi pare sensato passare ogni volta l'array traduzioni a tutte le sottoclassi.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Non hai chiaro come strutturare classi padre e figlio, nel tuo caso non serve estendere la classe Utente.

    La classe Utente andrebbe estesa se l'applicaizone prevedesse 2 "categorie" distinte di utenti e una delle due dovesse avere tutti gli attributi e funzioni della prima, più altre cose a cui la prima non può/deve accedere.
    Una classe non si estende per organizzare le varie funzioni.
    Se nella tua applicazione tutti gli utenti devono aver accesso a tutte le funzionalità, devi mettere tutto nella stessa classe Utente.

  5. #5
    Utente di HTML.it L'avatar di henry78
    Registrato dal
    May 2001
    Messaggi
    1,264
    Originariamente inviato da raven74
    ma l'array lo vuoi uguale per tutti gli utenti oppure ogni utente può avere un array diverso?

    Perché in effetti esistono le proprietà statiche degli oggetti, che sono uguali per tutti gli oggetti istanziati, e a dirla tutta per accedervi non serve nemmeno che la classe venga istanziata

    http://php.net/manual/en/language.oop5.static.php
    grazie per la risposta; in realtà è un array con le traduzioni che viene incluso in ogni pagina del sito:

    <?php
    $translations = array();
    $translations['it']['1'] = 'ristorante';
    $translations['it']['2'] = 'sala colazione';
    $translations['it']['3'] = 'mezza pensione';
    $translations['it']['4'] = 'ascensore';
    $translations['it']['5'] = 'Wireless';
    $translations['it']['6'] = 'ecc';
    ecc

    Quindi vorrei usare le parole tradotte anche all'interno delle varie classi e sottoclassi.

    Ho dato una occhiata agli oggetti istanziati, ma non capisco come includere l'array esterno nella classe :-(

  6. #6
    Utente di HTML.it L'avatar di henry78
    Registrato dal
    May 2001
    Messaggi
    1,264
    Originariamente inviato da raven74
    non hai risposto alla mia domanda: l'array è unico per tutto l'applicativo oppure ogni utente ha una versione diversa dell'array?

    se l'array è unico puoi fare

    Codice PHP:
    class MyClass
    {
        static 
    $traduzioni = array('ristorante''sala colazione');

        
    ect...


    e poi in qualsiasi parte del codice puoi accedere all'array così

    Codice PHP:
    MyClass::traduzioni 

    Si, l'array è sempre uguale.

    Il problema è passare a $traduzioni l'array che è esterno alla classe. Sembra impossibile?!

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.