2013-10-30 12 views
19

Ho recentemente effettuato un aggiornamento a PHP 5.4 e ottengo un errore sul codice statico e non statico.Metodo non statico ..... non dovrebbe essere chiamato staticamente

Questo è l'errore:

PHP Strict Standards: Non-static method VTimer::get() 
should not be called statically in /home/jaco/public_html/include/function_smarty.php on line 371 

Questa è la linea 371:

$timer = VTimer::get($options['magic']); 

Spero che qualcuno possa aiutare.

+3

Benvenuti allo stack overflow. Dovresti scegliere un nome utente. Suggerisco 'Novice Hobby PHP Boy'. – webbiedave

+3

Grazie e questo è un buon nome per me, Sergiu;) –

risposta

41

Ciò significa che dovrebbe essere chiamato come:

$timer = (new VTimer)->get($options['magic']);

la differenza tra static e non-static è che il primo non ha bisogno di inizializzazione in modo è possibile chiamare il classname quindi aggiungere :: ad esso e chiamata il metodo immediatamente. in questo modo:

ClassName::method(); 

e se il metodo non è statico è necessario inizializzare in questo modo:

$var = new ClassNmae(); 
$var->method(); 

Tuttavia in PHP 5.4 è possibile utilizzare questa sintassi, invece, per chiamare più rapidamente:

(new ClassName)->method(); 
+2

O forse dovrebbe cambiare il metodo per essere statico (poiché questo è un codebase esistente che viene ora eseguito in un ambiente PHP aggiornato). – webbiedave

+1

@webbiedave - sì, funzionerebbe anche: P –

+0

@mamdouh Sei fantastico, l'errore non c'è più. Grazie per il vostro aiuto. Buona serata. sinceramente, Jaco –

2

si può anche cambiare il metodo per essere statico in questo modo:

class Handler { 
    public static function helloWorld() { 
     echo "Hello world!"; 
    } 
}