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

    La variabile di classe non viene valorizzata!

    Codice PHP:
                           <?php 

    /** 
     * Class PropFile 
     */ 
    class PropFile 

        
    ////////////////////////// singleton ////////////////////// 
        
    private static $instance null
        private static 
    $param = array(); 
         
        public static function 
    getInstance() 
        { 
            if ((
    null === self::$instance) ) { 
                
    $class __CLASS__
                
    self::$instance = new $class
            } 
            return 
    self::$instance
        } 
         
        private function 
    __construct() { 
            
    $this->init(); 
        } 
         
         
        private static function 
    init(){ 
            
    $file '..\properties\miofile.properties'
            
    $testo file_get_contents($file); 
            
    $lines split("\n"$testo); 
            
    $key ""
            
    $isWaitingOtherLine false
            foreach (
    $lines as $i => $line) { 
                 
                if (empty(
    $line) || (!$isWaitingOtherLine && strpos($line"#") === 0)) 
                    continue; 
                 
                if (!
    $isWaitingOtherLine) { 
                    
    $key substr($line0strpos($line'=')); 
                     
                    
    $value substr($linestrpos($line'=')+1strlen($line)); 
                    
    file_put_contents('C:\Bitnami\wampstack-5.6.32-1\apache2\logs\erroreCustom.log''Valore letto: ' $value '\n'FILE_APPEND);                 
                } else { 
                    
    $value .= $line;     
                }     
                
    /* Check if ends with single '\' */ 
                
    if (strrpos($value"\\") === strlen($value)-strlen("\\")) { 
                    
    $value substr($value,0,strlen($value)-1)."\n"
                    
    $isWaitingOtherLine true
                } else { 
                    
    $isWaitingOtherLine false
                } 
                
    file_put_contents('C:\Bitnami\wampstack-5.6.32-1\apache2\logs\erroreCustom.log''Chiave letta: ' $key '\n'FILE_APPEND); 
                
    self::$instance->param[$key] = $value
                
    file_put_contents('C:\Bitnami\wampstack-5.6.32-1\apache2\logs\erroreCustom.log''Parametro letto: ' self::$instance->param[$key] . '\n'FILE_APPEND); 
                unset(
    $lines[$i]); 
                     
            } 
        } 
         
        public function 
    getValue($key){ 
            
    file_put_contents('C:\Bitnami\wampstack-5.6.32-1\apache2\logs\erroreCustom.log''Parametro richiesto: ' $key '\n'FILE_APPEND); 
            
    $parametro self::$param[$key]; 
            
    file_put_contents('C:\Bitnami\wampstack-5.6.32-1\apache2\logs\erroreCustom.log''Parametro trovato: ' $param[$key] . '\n'FILE_APPEND); 
            return 
    self::$instance->param[$key]; 
             
        } 


    }
    All'interno della funzione getValue() non riesco a leggere il valore di param[key], nonostante il valore di key che ricevo sia corretto. Sembra che la modifica all'array param resti all'interno della funzione e non venga vista all'esterno. Come posso fare?

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Ma del __construct nessun errore?
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    No nada

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Qui è un po' sbagliata l'implementazione del singleton, però per correggere l'assegnazione controlla questo:

    Tu fai una cosa del genere:

    codice:
    self::$instance->param[$key] = $value;

    Che è sbagliata, devi settare la proprietà della classe normalmente con un:

    codice:
    self::param[$key] = $value;

    Lasciando perdere l'instance. C'è da dire che utilizzando self:: avresti dei problemi in caso tu decidessi poi di estendere la classe.
    Quindi probabilmente per accedere alle proprietà sarebbe più opportuno utilizzare static::

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.