1
Anyone can help?
I’m getting this error while running a routine.
Deprecated: Non-static method Ttranslation::Translate() should not be called statically in C: wamp64 www Book app.widgets Ttranslation.class.php on line 105
transp.php
<?php
/*
* Inclui a classe TTranslation
*/
include_once 'app.widgets/TTranslation.class.php';
/*
* Define a linguagem como português
*/
TTranslation::setLanguage('pt');
echo "Em Português:<br>\n";
/*
* Imprime palavras traduzidas
*/
echo _t('Function') . "<br>\n";
echo _t('Table') . "<br>\n";
echo _t('Tool') . "<br>\n";
/*
* Define a linguagem como italiano
*/
TTranslation::setLanguage('it');
echo "Em Italiano:<br>\n";
// imprime palavras traduzidas
echo _t('Function') . "<br>\n";
echo _t('Table') . "<br>\n";
echo _t('Tool') . "<br>\n";
?>
Ttranslation.class.php
<?php
/**
* classe TTranslation
* classe utilitária para tradução de textos
*/
class TTranslation
{
private static $instance; // instância de TTranslation
private $lang; // linguagem destino
/**
* método __construct()
* instancia um objeto TTranslation
*/
private function __construct()
{
$this->messages['en'][] = 'Function';
$this->messages['en'][] = 'Table';
$this->messages['en'][] = 'Tool';
$this->messages['pt'][] = 'Função';
$this->messages['pt'][] = 'Tabela';
$this->messages['pt'][] = 'Ferramenta';
$this->messages['it'][] = 'Funzione';
$this->messages['it'][] = 'Tabelle';
$this->messages['it'][] = 'Strumento';
}
/**
* método getInstance()
* retorna a única instância de TTranslation
*/
public static function getInstance()
{
// se não existe instância ainda
if (empty(self::$instance))
{
// instancia um objeto
self::$instance = new TTranslation;
}
// retorna a instância
return self::$instance;
}
/**
* método setLanguage()
* define a linguagem a ser utilizada
* @param $lang = linguagem (en,pt,it)
*/
public static function setLanguage($lang)
{
$instance = self::getInstance();
$instance->lang = $lang;
}
/**
* método getLanguage()
* retorna a linguagem atual
*/
public static function getLanguage()
{
$instance = self::getInstance();
return $instance->lang;
}
/**
* método Translate()
* traduz uma palavra para a linguagem definida
* @param $word = Palavra a ser traduzida
*/
public function Translate($word)
{
// obtém a instância atual
$instance = self::getInstance();
// busca o índice numérico da palavra dentro do vetor
$key = array_search($word, $instance->messages['en']);
// obtém a linguagem para tradução
$language = self::getLanguage();
// retorna a palavra traduzida
// vetor indexado pela linguagem e pela chave
return $instance->messages[$language][$key];
}
} // fim da classe TTranslation
/**
* método _t()
* fachada para o método Translate da classe Translation
* @param $word = Palavra a ser traduzida
*/
function _t($word)
{
return TTranslation::Translate($word);
}
?>
This is not a mistake, it’s a warning (
warning
). The functionTranslate
it’s not static, so why don’t you just use the$this
? Or why not turn it into static? This second alternative is horrible, but the class is already badly shaped...– Jefferson Quesado
If you have a
getInstance
static, following the pattern Singleton, the other methods should be instantaneous. But the way you’re trying to use I also suspect that’s not what you want.– Isac
Thanks for the answers. Jefferson Quesado, how would the correct form then ?
– araujolops