Jump to content


Photo

[resolvido] Classes ... E Adodb


  • Faça o login para participar
8 replies to this topic

#1 salsa

salsa

    Normal

  • Usuários
  • 93 posts
  • Sexo:Não informado
  • Localidade:Porto Alegre

Posted 24/08/2007, 09:53

tenho 2 classes...

a conexao.php

<?
include_once('lib/adodb/adodb.inc.php');

class conexao {
	private $db, $server, $user, $pwd, $database;

	public function connect() { 
		$this->configs();
		$this->db = &ADONewConnection('mysql');
		$this->db->PConnect($this->server, $this->user, $this->pwd, $this->database);
		$this->db->SetFetchMode(ADODB_FETCH_ASSOC);
	}
	
	public function close() {
		$this->db->Close();
	}
	
	private function configs() {
		$this->server = 'localhost';
		$this->user = 'teste';
		$this->pwd = 'teste';
		$this->database = 'teste';
	}
}
?>

e a users.php

<?
class users {
	private $id, $login, $senha, $nivel;
	private $db;
	
	function __construct() {
		$this->db = new conexao();
		$this->db->connect();
	}
	/**
	 * Pega informacoes do usuario
	 * @return array
	 */
	function getUser() {
		$rs = $this->db->Execute("SELECT * FROM users");
		if (!$rs)
			print $this->db->ErrorMsg();
		else
			print_r($rs->fields);
		
		$rs->Close();
	}
	
	function getNivel() {
		
	}
	
	function setUser() {
		
	}
	
	function setNivel() {
		
	}
	
	function updateUser() {
		
	}
	
	function removeUser() {
		
	}
}
?>


ok... no meu index.php tenho...

<?
include_once("classes/conexao.php");
include_once("classes/users.php");

$users = new users();

$users->getUser();
?>

porem qndo abro a pagina.. ele retorna assim:

Fatal error: Call to undefined method conexao::Execute() in /home/salsa/classes/users.php on line 15

alguem sabe pq rola isso?

não sei oq to fazendo de errado...

valeu :)
+ www.rafinha.org

#2 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 24/08/2007, 10:15

Eu não sabia que é possível chamar um método em outro método, tipo $this->metodo->outroMetodo ... :lol:
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...

#3 salsa

salsa

    Normal

  • Usuários
  • 93 posts
  • Sexo:Não informado
  • Localidade:Porto Alegre

Posted 24/08/2007, 10:30

olha q eu saiba da... pq jah fiz isso ...
+ www.rafinha.org

#4 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 24/08/2007, 11:00

Eu não sabia que é possível chamar um método em outro método, tipo $this->metodo->outroMetodo ... :lol:


Dá sim, desde que você tenha referência desse objeto no outro objeto.

<?
class metodo0 {
	   public $foo = "bar";
	   function doSomething() {
			 echo $thos->$foo; //bar
	   }
}
class metodo1 {
	 public $variavel;
	 public function __construct($var) {
		   $this->variavel = new metodo0();
	 }
}
?>
$teste = new methodo1();
	  $teste->variavel->doSomething(); //Imprimirá foo

Isso que você desteta php bimonti (olhei seu passado aqui no fórum ^_^')

@salsa

Quem pode responder isso melhor é o PR, mas eu acho (tenho quase certeza) que você não consegue acessar a variavel $db porque ela está como private :unsure:.
Variaveis privates só podem ser acessadas diretamente pela classe: PHP Visibility
Por isso que eu uso um metodo publico getAlgumaCoisa() para variaveis privates.

faço as seguintes recomendações para você:
troca esse trecho
$this->db = &ADONewConnection('mysql');
		$this->db->PConnect($this->server, $this->user, $this->pwd, $this->database);

Por
$this->db = &ADONewConnection('mysqlt');
		$this->db->Connect($this->server, $this->user, $this->pwd, $this->database);

o driver mysqlt é melhor do que o mysql, mysqlt suporta transactions
Nunca use conexões persistentes, elas são danosas para com o servidor. O próprio site do php recomenda não usar isso: Chapter 41. Persistent Database Connections

Espero ter esclarecido os dois ^^

(y)

Edição feita por: savior, 24/08/2007, 11:08.

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#5 salsa

salsa

    Normal

  • Usuários
  • 93 posts
  • Sexo:Não informado
  • Localidade:Porto Alegre

Posted 24/08/2007, 11:43

opa, valeu savior, modifiquei a parte de connect como vc recomendou.

quanto a não estar conseguindo ler a variavel, continuo nao entendendo pq nao funciona, pq eu já tinha colocado a variavel $db do conexao.php como public ... mas mesmo assim nao consigo enxergar ela...

segui oq vc disse ali e nao rolou nao :/

conexao.php
class conexao {
	private $server, $user, $pwd, $database;
	public $db;

mas mesmo assim ele continua retornando o mesmo error.. :/
+ www.rafinha.org

#6 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 24/08/2007, 11:52

A ... acho que descobri ^^

(tentando ser mais rápido que o renan q á lendo o tópico xD

$this->db->db->Execute

Você esqueceu de chama a referência da referência quando você invocou a classe

Espero que ajude ~^

(y)

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#7 Renan Gonçalves

Renan Gonçalves

    Web Developer

  • Usuários
  • 771 posts
  • Sexo:Masculino
  • Localidade:São Paulo, SP
  • Interesses:Programar PHP, Java (e JSP), Javascript (com Ajax, claro), Ruby (on Rails) !

Posted 24/08/2007, 11:54

Tente dessa maneira:

function getUser() {
		$rs = $this->db->db->Execute("SELECT * FROM users");
		if (!$rs)
			print $this->db->db->ErrorMsg();
		else
			print_r($rs->fields);
		
		$rs->Close();
	}


Ahhhhhhhh... cheguei atrasado !!!
Na verdade eu estava lendo o tópico ai chegou um amigo aqui no micro pedindo pra ver algo no Orkut, perdi tempo !!!
Boa savior !!!


[]'s

Edição feita por: Renan Gonçalves, 24/08/2007, 11:56.

Renan Gonçalves
renan.saddam@gmail.com
(WebSite / Gmail / orkut / Windows Live! Messenger
)

"Aquele que se define se limita."


#8 salsa

salsa

    Normal

  • Usuários
  • 93 posts
  • Sexo:Não informado
  • Localidade:Porto Alegre

Posted 24/08/2007, 12:34

era isso mesmo hehehe...

valeu pela ajuda pessoal :)


maquei e nao vi q faltou chamar a o metodo da var ahuiahuiaa

valeu :)
+ www.rafinha.org

#9 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 24/08/2007, 13:04

Isso que você desteta php bimonti (olhei seu passado aqui no fórum ^_^')


Desconheço tamanha inverdade, deve ter sido algum dia que estava bêbado ou tinha cheirado um gatinho ... ^^

Essa de mandar um path completo do windows em classes eu desconhecia, na minha humildade só fiz uma classe pra enviar anexos inline que eu ainda modifiquei de um mané NxZero aí que eu achei no fórum, que alias ele não me passou o nome completo pra eu colocar de créditos na documentação. ^^

Edição feita por: bimonti, 24/08/2007, 13:05.

WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq