Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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;
}
}
?>Agora retornou outro erro
Fatal error: Undefined class constant 'tDoc' in C:\xampp\htdocs\guia3\usuarios\estabelecimento\modules\generalModule.php on line 14
$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.
Agora retornou:
Fatal error: Access to undeclared static property: Data::$tDoc in C:\xampp\htdocs\guia3\usuarios\estabelecimento\modules\generalModule.php on line 14
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:
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...
Agora funcionou brigadao!!
Ja tentou usar o
self::nome_do_seu_atributo
no lugar o $this?