Assegnazione $this->nomevar

salve ragazzi,

ho un file dove ha un require e sotto segue alcune chiamate così:

echo $this->language;

io sapevo che una classe si richiama in questo modo:

$obj = new NomeClasse();

echo $obj->language;

io mi chiedo come fa a utilizzare questa classe $this perchè mi da un errore del tipo:

Fatal error: Using $this when not in object context in D:..\......\..etc etc.

aiutatemi vi prego altrimenti vado ad uccidere qualche qualche programmatore di php

inviato 6 anni fa
eros23
X 0 X

Ciao eros23, ti prego non mi ammazzare la community, già gli italiani attivi si contano con le dita di una mano.

Per quanto riguarda il tuo problema, non è che mi sia del tutto chiaro, ma a grandi linee penso di avere in mente la situazione.

Quando un file viene incluso all'interno di una classe è possibile utilizzare $this per accedere ai membri (metodi ed attributi) dell'istanza. Qualcosa del genere:

<?php
    // MiaClasse.php
    class MiaClassse
    {
        protected $variabile = 'valore';

        public function __construct()
        {
            include 'file.php';
        }

        public function getVariabile()
        {
            return $this->variabile;
        }
    }
<?php
    // file.php
    echo $this->variabile; // Mostra il messaggio: valore

Quel genere di errore che hai citato viene sollevato quando si cerca di accedere alla variabile $this all'esterno di una classe.

Ecco un'esempio che soffre del tuo stesso problema:

<?php
    // sbagliato.php

    $oggetto = new MiaClasse();
    echo $this->getVariabile();
~$ php -f sbagliato.php
PHP Fatal error:  Using $this when not in object context in sbagliato.php on line 4

Fatal error: Using $this when not in object context in sbagliato.php on line 4

Ti consiglio di dare un'occhiata a questa citazione presa dalla documentazione di PHP

The pseudo-variable $this is available when a method is called from within an object context. $this is a reference to the calling object (usually the object to which the method belongs, but possibly another object, if the method is called statically from the context of a secondary object).

La soluzione non è complicata. Se il file che includi utilizza le variabili $this per fare riferimento all'istanza è sufficiente assicurarsi che venga incluso solo all'interno della definizione della classe (e anche di non includerlo da altre classi, per evitare risultati inattesi); nel caso in cui tentasso di includere quel file all'esterno di una classe PHP ti dirà che non ha senso utilizzare $this all'esterno del contesto di un oggetto, e saresti di nuovo al punto di partenza ;)

Spero che dopo averti confuso terribilmente, tu abbia capito dov'era il tuo problema e sia riuscito a risolverlo  O0

:bye:

risposto 6 anni fa
Andrea Turso
Andrea Turso
86
modificato 6 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda