Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro Guimarães

Fatal error: Using $this when not in object context in

Recommended Posts

Tenho a versão 5.1.2 do PHP rodando no Apache 2.0.53.

Criei uma classe chamada Pessoa que contém atributos com nome, e-mail, etc. O código está OK, sem nenhum erro de sintaxe, verifiquei utilizando o analizador de código do Zend Studio 5.2.

Mas quando eu executo o código no servidor retorna o seguinte erro:

Fatal error: Using $this when not in object context in C:\servidor\Apache2\htdocs\franco\usecases\Pessoa.php on line 76

 

Na linha que gera o erro tem o seguinte código:

76: if($this->validaPessoa()){

... ...

110: }

 

Esse método valida os dados que foram fornecidos. Mas o mesmo erro ocorre se por exemplo eu chamar outro método ou atributo da classe acima dele:

75: echo $this->nome;

76: if($this->validaPessoa()){

... ...

110: }

 

E fico intrigado porque todos os atibutos e métodos que utilizo na classe geram esse erro.

Se por favor alguém puder me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fala meu brother !

Então fera, sempre atente para oque o php te diz !

Using $this when not in object context in

traduzindo para um portugues simplificado, isso ocorre, na maioria das vezes, porque você não esta usando o $this-> dentro da classe, ou tb, pode ser que você esta chamando um método de uma classe não instanciada/referenciada no seu projeto ....

se você quizer, posta o código todo ae !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?

require_once("Email.php");

require_once("Endereco.php");

require_once("Telefone.php");

require_once("Usuario.php");

require_once("components/Data.php");

require_once("exceptions/Error.php");

/**

* Classe Pessoa

*

* @author RosePhpTool

* @version 1.00

*/

class Pessoa {

/**

* @var Error

*/

public $errors;

/**

* @var String

*/

private $id;

/**

* @var String Nome do cliente

*/

private $nome;

/**

* @var java.sql.Date

*/

public $data_nascimento;

/**

* @var Email

*/

public $email;

/**

* @var Endereco

*/

public $endereco;

/**

* @var array

*/

private $telefones;

/**

* @var Usuario

*/

public $usuario;

/**

* @var char Tipo de cliente:

F - Pessoa física

J - Pessoa jurídica

*/

private $tipo_cliente;

 

/**

* @return

*/

function __construct() {

$this->setId("");

$this->setNome("");

$this->usuario = new Usuario();

$this->data_nascimento = new DataClass();

$this->email = new Email();

$this->endereco = new Endereco();

$this->telefones = array();

$this->errors = new Error();

}

/**

* @param Pessoa $pessoa

* @return boolean

*/

public static function add(){

$bd = new database(HOST_BD,USER_BD,PASSWORD_BD,NAME_BD);

$telefone = new Telefone();

$data_nascimento = "";

 

if($this->validaPessoa()){

$data_nascimento = $this->data_nascimento->formataData($this->data_nascimento->getData(),'-',"ddmmaaaa","aaaammdd");

 

$id = $this->getId();

 

if(empty($id))

$this->idGen($this->getNome());

 

$bd->setQuery("INSERT INTO ".TB_PESSOA." (id,nome,data_nascimento,email,logradouro,numero,complemento,

ponto_referencia,cep,bairro,cidade) VALUES('".$this->getId()."',

'".$this->getNome()."','".$data_nascimento."','".$this->email->getEmail()."',

'".$this->endereco->getLogradouro()."','".$this->endereco->getNumero()."',

'".$this->endereco->getComplemento()."','".$this->endereco->getPtoRef()."',

'".$this->endereco->getCep()."','".$this->endereco->getBairro()."',

'".$this->endereco->getCidade()."','".$this->endereco->estado->getUF()."')");

 

$this->telefones->setProprietario($this->getId());

$this->usuario->setResponsavel($this->getId());

 

foreach ($this->telefones as $telefone){

if(!($this->telefones->add()))

return false;

}

 

if(!($this->usuario->add())){

return false;

}

 

if(!$bd->toExecuteQuery()){

$this->errors->setError($bd->getErros(true));

return false;

}

 

return true;

}

 

return false;

}

/**

* @return boolean

*/

public function validaPessoa(){

$this->errors->clear();

 

$data_nascimento = $this->data_nascimento->getData();

$email = $this->email->getEmail();

 

if(!($this->usuario->validaUsuario())){

$this->errors->setError($this->usuario->errors->getErrors());

}

if(empty($this->nome)){

$this->errors->setError("Informe o nome");

}

if(empty($data_nascimento)){

$this->errors->setError("Informe a data de nascimento");

}

if(empty($email)){

$this->errors->setError("Informe o e-mail");

}

if(!($this->endereco->validaEndereco('U'))){

$this->errors->setError($this->endereco->errors->getErrors());

}

if(empty($this->telefone)){

$this->errors->setError("Informe um dos telefones"); ////////////////////////

}

else {

if(!empty($this->telefones)){

foreach ($this->telefones as $telefone){

if(!($telefone->validaTelefone()))

$this->errors->setError($telefone->errors->getErrors());

}

}

}

 

if($this->errors->numErrors()>0)

return false;

 

return true;

}

/**

* @param Pessoa $pessoa

* @return boolean

*/

public function modify() {

$bd = new database(HOST_BD,USER_BD,PASSWORD_BD,NAME_BD);

$id = $this->getId();

if (empty($id)){

$this->errors->setError("Informe o código do registro a ser alterado");

}

if($this->validaPessoa()){

$bd->setQuery("UPDATE ".TB_PESSOA." nome='".$this->getNome()."',

data_nascimento='".$data_nascimento."',email='".$this->email->getEmail()."',

logradouro='".$this->endereco->getLogradouro()."',numero='".$this->endereco->getNumero()."',

complemento='".$this->endereco->getComplemento()."',ponto_referencia'".$this->endereco->getPtoRef()."',

cep='".$this->endereco->getCep()."',bairro='".$this->endereco->getBairro()."',

cidade='".$this->endereco->getCidade()."',estado='".$this->endereco->estado->getUF()."'

WHERE id='".$this->getId()."'");

 

if(!$bd->toExecuteQuery()){

$this->errors->setError($bd->getErros(true));

return false;

}

 

return true;

}

return false;

}

/**

* @param String $id

* @return boolean

*/

public function delete($id) {

$telefone = new Telefone();

$bd = new database(HOST_BD,USER_BD,PASSWORD_BD,NAME_BD);

$bd->setQuery("DELETE FROM ".TB_PESSOA." WHERE id='".$id."'");

//apagar todos os telefones

if(!($telefone->deleteAll($this->getId())))

return false;

//apagar todas as operações

/////////////////////////////////////

//apagar todas as visitas

/////////////////////////////////////

//apagar todos os imóveis

/////////////////////////////////////

//apagar dados de pessoa física ou jurídica

/////////////////////////////////////

if(!$bd->toExecuteQuery()){

$this->errors->setError($bd->getErros(true));

return false;

}

 

return true;

}

/**

* @return String

*/

public function search() {

}

 

/**

* @return String

*/

function idGen($string) {

$bd = new database(HOST_BD,USER_BD,PASSWORD_BD,NAME_BD);

 

$nl = strlen($string);

$posm = round(floatval($nl/2));

$posf = $nl-1;

 

$string = strtr($string,"âãáàäêéèëîíìïöóòôõúûùüç","aaaaaeeeeiiiiooooouuuuc");

$string = strtr($string,"ÂÃÁÀÄÊÉÈËÎÍÌÏÖÓÒÔÕÚÛÙÜÇ","AAAAAEEEEIIIIOOOOOUUUUC");

 

 

$novoid = $string[0];

$novoid .= $string[1];

 

if ($string[$posf]=='\t'){

$posf--;

$novoid .= $string[$posf];

}

else $novoid .= $string[$posf];

 

if($string[$posm]=='\t'){

$posm++;

$novoid .= $string[$posm];

}

else $novoid .= $string[$posm];

 

 

$bd->setQuery("SELECT id FROM ".TB_PESSOA);

 

$p = strval($bd->getNumRows());

$p = str_pad($p,3,'0',STR_PAD_LEFT);

$novoid .= $p;

 

$this->setId($novoid);

 

return strtoupper($novoid);

}

/**

* @param String $id

* @return Void

*/

public function setId($id) {

$this->id = strval($id);

}

/**

* @param String $nome

* @return Void

*/

public function setNome($nome) {

$this->nome = strval($nome);

}

/**

* @param Telefone $telefone

* @return Void

*/

public function setTelefone(Telefone $telefone){

$this->telefone[] = $telefone;

}

/**

* @return String

*/

public function getId() {

return strval($this->id);

}

/**

* @return String

*/

public function getNome() {

return strval($this->nome);

}

/**

* @param Int $pos

* @return array ou Telefone

*/

public function getTelefone($pos=null){

if(is_null($pos)){

return $this->telefone;

}

else return $this->telefone[int($pos)];

}

/**

* Altera o valor do atributo tipo, no qual:

F - Pessoa física

J - Pessoa jurídica

*

* @param char $tipo

* @return Void

*/

public function setTipo($tipo) {

$this->tipo_cliente = strval(strtoupper($tipo));

}

/**

* Retorna o tipo de cliente:

F - Pessoa Física

J - Pessoa Jurídica

*

* @return char

*/

public function getTipo() {

return $this->tipo_cliente;

}

 

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja bem, você definiu o método "add" como static. Como a variável $this aponta para a instância da classe, ela simplesmente não existirá quando esse método for chamado estaticamente. Portanto, você deverá verificar se o $this está definido e se ele é do tipo da classe:

 

if (isset($this) && is_object($this) && is_a($this, __CLASS__)) {
// após esta verificação, você pode utilizar a
// variável $this dentro de um método estático
}

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.