2015-05-05 28 views
5

Stavo lavorando su un'applicazione Web PHP. Ho usato un nuovo datagrid da gurrido.net e ha funzionato bene sul locale, ma quando si invia al server, ottengo il seguente errore:Impossibile eseguire il metodo non statico - ERRORE FATALE

Fatal error: Cannot make non static method Base::getClassName() static in class Singletons in /var/www/reskb/phpinc/Singletons.class.php on line 84

Nella mia vecchia versione in cui non ho usato la griglia , Ho funzionato Ecco il mio codice di file di singletons.class.php:

<? 
class Singletons extends Base { 
    var $objects = array(); 
    function getClassName() { 
     return 'Singletons'; 
    } 
    function _instance() { 
     static $_instance = NULL; 
     if ($_instance == NULL) { 
      $className = Singletons::getClassName(); 
      $_instance = new $className(); 
     } 
     return $_instance; 
    } 
    function put($object) { 
     $self = Singletons::_instance(); 
     $className = $object->getClassName(); 
     $self->objects[$className] = $object; 
    } 
    function get($className) { 
     $self = Singletons::_instance(); 
     if(!empty($self->objects[$className])) 
      return $self->objects[$className]; 
     else return ''; 
    } 
} 
Singletons::_instance(); 
?> 
+0

È necessario chiamare la funzione getClassName utilizzando l'oggetto o definire getClassName come statico. –

+1

È necessario anche inserire il codice per la classe 'Base'. –

risposta

1

È necessario chiamare la funzione getClassName utilizzando l'oggetto o definire getClassName come statico. -

<?php 
    class Singletons extends Base { 
     var $objects = array(); 
     static function getClassName() { 
      return 'Singletons'; 
     } 
     static function _instance() { 
      static $_instance = NULL; 
      if ($_instance == NULL) { 
       $className = Singletons::getClassName(); 
       $_instance = new $className(); 
      } 
      return $_instance; 
     } 
     function put($object) { 
      $self = Singletons::_instance(); 
      $className = $object->getClassName(); 
      $self->objects[$className] = $object; 
     } 
     function get($className) { 
      $self = Singletons::_instance(); 
      if(!empty($self->objects[$className])) 
       return $self->objects[$className]; 
      else return ''; 
     } 
    } 
    Singletons::_instance(); 
    ?> 
+0

ho usato il tuo codice ma ancora lo stesso errore. –

+0

ora ricevo errore sul server locale e sul server –

+0

Prova lo stesso codice qui: http://codepad.viper-7.com/ClsWpH. Nota: ho rimosso l'eredità per il momento. Controlla ora. –

0

Stai diventando l'errore perché si sta cercando di chiamare la funzione in modo statico quando non è un metodo statico (funzione).

è necessario specificare la funzione statica:

static function getClassName() { 
    return 'Singletons'; 
} 

questo vale per ogni metodo che desideri chiamare staticamente.

+0

stesso errore si ripete –

+1

@HelloMan Come si presenta il file di classe 'Base'? Capita di avere un metodo 'getClassName()'? – Darren

Problemi correlati