PHP Deprecated: Non-static method should not be called statically in

Asked

Viewed 4,478 times

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 function Translate 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...

  • 1

    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.

  • Thanks for the answers. Jefferson Quesado, how would the correct form then ?

1 answer

2

The problem is a warning that the function is not static:

function _t($word)
{
    return TTranslation::Translate($word);
}

That’s how you called the function Translate() it represents a static function, there are two options to resolve this warning:

The first is to call the function as being not stable:

function _t($word)
{
    return TTranslation->Translate($word);
}

The second is to transform the function Translate() in static:

static 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];
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.