Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    40

    PHP5 e Singleton Pattern

    Sto diventando matto per una cosa che in verità dovrebbe essere stupidissima...non riesco ad implementare un Singleton Pattern!
    Ho cercato in tutti i forum possibili immaginabili e ho provato tutte le seoluzioni, ma ogni volta che richiamo per esempio il metodo statico getInstanze(), quest'ultimo trova la variabile di classe statica sempre a null anche se è stata istanziata precedentemente! Come è possibile?

    Nel caso specifico ho una index.php così fatta:

    Codice PHP:
    <?php

    session_start
    ();

    try {

    ?>

    <?php

    include_once("config/Util.php");
    include_once(
    "config/Config.php");
    include_once(
    "fmwk/BaseServlet.php");
    include_once(
    "fmwk/HtmlUtil.php");

    ?>

    <html>
        <head></head>
      <title>oCars</title>
      <body>

          <?php BaseServlet::getInstance()->initServlet(); ?>

      </body>
    </html>

    <?php

    } catch (Exception $e) {
        
    $_SESSION['errore'] = $e;
        require_once(
    "front_end/common/globalException.php");
    }

    ?>
    e la classe baseServlet così fatta:

    Codice PHP:
    <?php

      
    class BaseServlet {

        private static 
    $appConfig null;
        private static 
    $instance;

        private function 
    __construct() {}

        public static function 
    getInstance() {
               
    println("classe :".self::$instance);
            if(!isset(
    self::$instance)) {
               
    println("INSTANZIO...");
                
    $object__CLASS__;
                
    self::$instance=new $object;
            } else 
    println("NON INSTANZIO");

            return 
    self::$instance;
        }

        function 
    initServlet() {

            if (
    self::$appConfig == null) {
                   
    println("parsing xml...");

                     
    $appConfig simplexml_load_file('app-config.xml');

                   
    $config['initLang'] = (string)$appConfig->initLanguage['lang'];
                   
    $config['queryRepositoryPath'] = (string)$appConfig->queryRepository['path'];
                   
    $config['queryRepositoryName'] = (string)$appConfig->queryRepository['name'];
                   
    $config['dbName'] = (string)$appConfig->db['name'];
                   
    $config['dbHost'] = (string)$appConfig->db['host'];
                   
    $config['dbUser'] = (string)$appConfig->db['user'];
                   
    $config['dbPassword'] = (string)$appConfig->db['password'];
                   
    $config['frontEndPath'] = (string)$appConfig->front_end['path'];
                   
    $config['applicationResourcesPath'] = (string)$appConfig->applicationResources['path'];

                   
    $_SESSION['app-config'] = (array)$config;
                   
    $_SESSION['current-lang'] = (string)$config['initLang'];
              } else 
    println("NO PARSING");

        }

      }


    ?>
    Il metodo getInstance() mi istanzia sempre una nuova classe BaseServlet...perchè??
    Facio presente che questo pattern mi serve anche per parsare una sola volta i file xml e anche in questo caso non mi funziona!

  2. #2
    Intendi dire che ogni volta che fai una nuova richiesta HTTP viene istanziata una nuova classe Signleton?

    Prova questo codice:

    Codice PHP:
    $servlet1 BaseServlet::getInstance();
    $servlet2 BaseServlet::getInstance(); 
    Che cosa ti restituisce?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    40
    Esatto...ogni volta che faccio una richiesta HTTP (una submit nel mio caso) mi istanzia nuovamente gli oggetti.
    Il codice che mi hai dato tu funziona ovviamente all'interno della stessa richiesta...
    Venendo da java e j2ee credevo che le variabili statiche fuzionassero alla stessa maniera, ma in questo caso mi sembra di no...come posso risolvere?
    Avevo pensato di metterle in sessione e testare quelle, ma anche così a volte mi da comportamenti strani...a volte istanzia a volte no...

  4. #4
    Esatto...ogni volta che faccio una richiesta HTTP (una submit nel mio caso) mi istanzia nuovamente gli oggetti.
    E' cosi' che funziona PHP.

    In J2EE hai un application server, PHP non funziona secondo quel principio.

    Non puoi applicare i concetti di J2EE in PHP senza comprendere come funzioni il PHP.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    40
    Ma porc...e non è pesante ogni volta fare un parsing dell'xml? Soprattutto se magari l'xml è grande? Come si può risolvere??

  6. #6
    Ad esempio non utilizzare XML come file per la configurazione. Sopratutto visto che i dati li salvi in un array, tanto vale utilizzare un semplice file PHP.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    40
    Già...però che disdetta...stavo facendo tutta una cosa caruccia dove le query erano tutte immagazzinate in un file xml...

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    40
    Me la sto cavando utilizzando la sessione, però essendo quest'ultima specifica per ogni utente queste informazioni vengono ricaricate per ogni utente...
    Esiste un modo in PHP5 per utilizzare delle variabili che sono viste dove voglio e per qualunque utente? (che se viene modificata per un utente la modifica viene vista da tutti)

  9. #9
    L'unico strumento esistemte è http://www.php.net/shmop oppure utilizzare un repository comune (es. database, filesystem).

    Per quale motivo non vuoi utilizzare un semplice file PHP? Non si tratta di dati pressochè statici che dovrebbero essere aggiornati con una bassissima frequenza?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    40
    Si si potrei infatti...diciamo che lo starei facendo per una questione di studio...per mia curiosità insomma...

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.