Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lucas Mendes de Freitas

[Resolvido] Fatal error: Using $this when not in object cont

Recommended Posts

Aew galera podem me dar uma ajuda esta retornando o seguinte erro:

 

Fatal error: Using $this when not in object context in C:\xampp\htdocs\guia3\usuarios\estabelecimento\modules\generalModule.php on line 14

 

O codigo:

<?php

 Class Data{

   private $doc;
   private $tDoc;

   function __construct(){
     $this->doc = $_SESSION['doc'];
     $this->tDoc = $_SESSION['tDoc'];
   }

   static function getDados($table){
     $SQL = "SELECT * FROM  `".$table."` WHERE `".$this->tDoc."`='".$this->doc."'";
     $q = mysql_query($SQL);
     $t = mysql_fetch_assoc($q);
     return $t;
   }

   function getMatrix($table){
     $SQL = "SELECT * FROM `".$table."` WHERE `".$this->tDoc."`='".$this->doc."'";
     $q = mysql_query($SQL);
     return $q;
   }

   function updateField($table,$fieldName,$newValue){
     $SQL = "UPDATE `".$table."` SET `".$fieldName."`='".$newValue."' WHERE `".$this->tDoc."`='".$this->doc."'";
     $q = mysql_query($SQL);
     if($q){
       return true;
     } else {
       return false;
     }
   }

   function causeError($pageReturn){
     $line = '<meta http-equiv="refresh" content="'.$pageReturn.'">';
     echo '<script language="JavaScript">alert("Ocorreu um erro durante a alteração!");</script>';
     echo $line;
   }

   function causeSuccess($pageReturn){
     $line = '<meta http-equiv="refresh" content="'.$pageReturn.'">';
     echo '<script language="JavaScript">alert("Alterado com sucesso!");</script>';
     echo $line;
   }

 }

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora retornou outro erro

 

Fatal error: Undefined class constant 'tDoc' in C:\xampp\htdocs\guia3\usuarios\estabelecimento\modules\generalModule.php on line 14

Compartilhar este post


Link para o post
Compartilhar em outros sites

$this você usa em métodos de objeto não estáticos

 

Quando o método é estático, usa-se self

 

Mas para apontar uma propriedade com self, faz-se necessário o uso do cifrão:

 

self::$propriedade

Porém, recomendao que estude melhor Orientação a Objetos pois esse getDados não deveria ser estático.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora retornou:

 

Fatal error: Access to undeclared static property: Data::$tDoc in C:\xampp\htdocs\guia3\usuarios\estabelecimento\modules\generalModule.php on line 14

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, você pelo visto está querendo aprender OOP de forma "picada".

 

self só pode ser usado para invocar métodos ou referenciar propriedades que também sejam estáticas.

 

Maiores informações e até mesmo futuras dúvidas, leia o manual. :thumbsup:

 

Tem em português também :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Calma lá, cara. Vamos por partes.

 

Você sabe pra que serve, qual a definição de um método/propriedade estáticos?

Em OO, um método/propriedade estáticos são tais que se referem a uma classe, não a um objeto em específico.

Imagine assim:

class Teste {
public $var; //vou usar public só pra facilitar e não ter que criar métodos getters nem setters
public static $staticVar;
}

 

Quando você faz:

$t1 = new Teste();
$t1->var = 1;

$t2 = new Teste();
$t2->var = 2;

 

Você tem dois objetos diferentes, certo?

Dessa forma existem 2 propriedades $var, uma pra cada objeto.

 

Agora $staticVar só existe UMA, pois ela referencia a classe Teste, não um objeto dessa classe.

 

Entretanto, um OBJETO Teste NÃO POSSUI uma propriedade $staticVar.

Dessa forma, você não pode fazer:

$t1->staticVar = 0;

 

Da mesma forma, a classe Teste não é um objeto, ela é um modelo para criação de objetos.

$this é uma variável de contexto do objeto, quer dizer 'este objeto', ou 'o objeto atual'.

Em um método estático (que está no contexto da Classe), você não pode utilizar $this, pois $this está no contexto do OBJETO, não da classe.

Assim sendo, métodos estáticos só podem acessar propriedades estáticas.

 

Para resolver seu problema, ou você declara o método como não-estático ou declara as variáveis como estáticas.

Para referenciar métodos e variáveis estáticas, use a palavra-chave self:

self::$staticVar(); // variável
self::staticMethod(); // método

 

Pro seu caso, acho que faz mais sentido a primeira opção...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.