Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Variabili di classe

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132

    Variabili di classe

    Ciao, ho bisogno di instanziare una variabile ad un punto del flusso del programma per poi leggerla in punti successivi, in altri linguaggi uso le variabili di classe o il Singleton.
    Ho provato con il Singleton ma mi da problemi.

    codice:
    class ClasseA {
    private $nome;
    protected static $istanza = null;
    private function __construct() {}
    public static function getInstance() {
    if(is_null(self::$istanza)) {
    self::$istanza = new ClasseA ();
    }
    return self::$istanza;
    }
    
    function getNome() {
    return $this->nome;
    }
    function setNome($log) {
    $this->nome=$log;
    }
    }
    
    
    class ClasseB {
    ...
    require_once('Class/ClasseA.php');
    $classA = ClasseA::getInstance();
    $classA->setNome("nome NEW");
    ...
    }
    
    
    class ClasseC {
    ...
    require_once('Class/ClasseA.php');
    $classA =ClasseA::getInstance();
    $name = $classA->getNome();
    // funziona ma non torna "nome NEW"
    ...
    }

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    Prova questo.

    Codice PHP:
    <?php
    class ClasseA
    {
     private static 
    $name '';
     
     
     public static function 
    setName($aName)
     {
      
    self::$name '';
      
    self::$name $aName;
     }
     
     public static function 
    getName()
     {
      return 
    self::$name;
     } 
    }
    class 
    ClasseB
    {
     public function 
    pippo()
     {
      
    ClasseA::setName('NEW NAME');
     }
     
    }
    class 
    ClasseC
    {
     public function 
    pippo()
     {
      print 
    ClasseA::getName();
     }
    }
    $b = new ClasseB();
    $b->pippo();
    $c = new ClasseC();
    $c->pippo();
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132
    Scusate sono poco esperto di programmazione php, pare che entrambi i codici funzionino fino ad un certo punto, forse il problema risiede nella struttura della pagina, che proverò a spiegare.
    Nella pagina index.html c'è un pulsante che invia un valore <input> ad una classe che interroga il database e se incontra il valore, istanzia la variabile nella classe Singleton. Se il valore su db è stato trovato index.html chiama pagina1.html che visualizza la variabile istanziata su Singleton.
    Entrambi i codici postati funzionano fino alla chiamata di pagina1.html dopo pare che la classe Singleton si resetti.

    codice:
    -- file Index.php
    <?php
    if (isset($_POST['bottone1'])) {
    // input valore
    $val=$_POST["valinput"];
    // Db.php controlla valore su db e istanzia la variabile della classe Singleton
    require_once( "Db.php");
    $result= getLOG($val);
    // fino a qui entrambi i codici funzionano
    if ($result) { // se == true (no errori nella ricerca su db)
    // va a pagina1.html, da qui la classe Singleton è resettata !
    $codiceOK= Array ();$codiceOK[0]="val1";$codiceOK[1]="val2";
    $prova=urlencode(serialize($codiceOK));
    $URL="/Pagina1.php?valore=".$prova."'";
     header ("Location: $URL");
    }
    ?>
    
    -- file Pagina1.php
    <?php
    require_once( "Singleton.php");
    $classB = new Singleton();
    $name=$classB::getName();
     echo "name :".$name;echo "<br>";echo "<br>";
    ?>
    
    -- file Singleton .php
    class Singleton { // funziona con entrambi i codici postati}
    
    -- file Db.php
    function getLOG($log) {
    //  legge db e torna il valore da scrivere sulla variabile nel Singleton (torna false se non trova nulla)
    ...
    // istanzia la variabile della classe Singleton
    require_once( "Singleton.php");
    $classA = new Singleton();
    $classA::setName($mercato);
    ... }
    Grazie ancora.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.