Ir para conteúdo

POWERED BY:

Arquivado

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

*_Charles Potter_*

Utilizando um Classe dentro de outra Classe

Recommended Posts

Gente tenho uma dúvida, tentei de tudo e nada resolveu.Tipo fiz duas Classes, uma se chama "db" e a auto "autenticacao" na classe autenticação é necessário acessar algumas tabelas do banco de dados. Esse acesso teria de ser feito pela classe "db". Como faço para iniciar e utilizar uma classe dentro da outra?Obrigado desde já;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também é possível instanciar um objeto dentro de outra classe. Por exemplo:

 

class Beraldo
{
	function X()
	{
		echo "Oi, sou o Beraldo!";
	}
}

class Teste
{
   function Teste()
	{
		$b = new Beraldo();
		$b->X();
	}
}

$t = new Teste();
//será mostrado "Oi, sou o Beraldo"

É outra saída, caso não queira extender a classe. ;)

 

Abraços,

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza gente, a idéia de extender a classe me passou pela cabeça, e a do Beraldo tb. Mas....A classe "db" contem todos so dados do banco de dados, é ela que conecta a database.A classe "autenticação" é uma classe que fiz para autenticar o usuario que se loga.Quando a classe db é iniciada, ele conecta a database, depois dela ser iniciada entra a classe de autenticação, então a minha pergunta é:É possivel utilizar a classe "db" dentro da classe "autenticacao" sem reconctar a database?Tipo:- carega a classe "db"- inicia a database- inicia a classe autenticacao- na classe autenticacao é utilizado as dunções da classe "db" que ha foram iniciados

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro acho que você deveria extender visto que a classe de autentificação depende da classe db,

 

bom voce deve usar construtores para iniciar o que você quer automaticamente, crostutor é um metodo que inicia automaticamente qunado você inicia a classe.

 

veja

 

http://br.php.net/manual/pt_BR/language.oop.constructor.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

precisa extender nada não, não aplica-se o conceito de herança neste caso.

 

não consigo ver a classe de autenticação filha de uma classe de banco de dados.

 

oque voce pode fazer, é criar um método dentro da classe de autenticação para setar o objeto db dentro da mesma. ex.:

 

class Auth {  protected static $_dbObject = null;  public static function setDb($dbAdapter) {	 self::$_dbObject = $dbAdapter;  }  public function authenticate ($username, $password) { 	   /* @stub		  verificar login utilizando o $this->getDb para retornar o objeto de abstração com o banco		*/	    }  protected function getDb () {   return self::$_dbObject;  }}

e na hora de utilizar :

 

Auth::setDb($mysqli); // por exemplo

$auth = new Auth();

$auth->authenticate('Luis Filipe','senha');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Void,

 

Fiquei confuso, não entendi bem como você quiser dizer, tentei uzar teu exemplo e retornou o seguinte erro:

" Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in e:\www\classes para utilziação em projetos\cópia de autenticacao\teste.php on line 4 "

 

Podias me dar um exemplo, usando a maneira que você demonstrou, mas tipo, tenho a calsse "A" e a classe "B".

 

Obrigado;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Potter,

 

Entendi bem sua dúvida. Sempre gostei de coisas automatizadas que me poupem trabalho. A solução que encontrei para este problema foi criar uma classe 'padrão' para extender todas as outras classes que utilizam banco de dados. Para a classe de banco de dados eu uso o padrão Singleton (http://br.php.net/manual/pt_BR/language.oop5.patterns.php) para caso alguma outra classe já ter instanciado o objeto do banco de dados, aproveitar o que já foi criado. Ele é chamado pela classe 'padrão' através do construtor. Sempre que crio uma classe extendo a classe padrão, que além de fazer a conexão com o banco de dados também executa outras tarefas comuns dos meus sistemas. Vou te dar um exemplo da utilização:

 

 

classe objetoPadrao {
	private $dbConn;
	public function __construct()
	{
		 $dbConn =& dbObject::getInstance();
	}
}
classe Auth extends objetoPadrao()
{

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Potter,

 

Entendi bem sua dúvida. Sempre gostei de coisas automatizadas que me poupem trabalho. A solução que encontrei para este problema foi criar uma classe 'padrão' para extender todas as outras classes que utilizam banco de dados. Para a classe de banco de dados eu uso o padrão Singleton (http://br.php.net/manual/pt_BR/language.oop5.patterns.php) para caso alguma outra classe já ter instanciado o objeto do banco de dados, aproveitar o que já foi criado. Ele é chamado pela classe 'padrão' através do construtor. Sempre que crio uma classe extendo a classe padrão, que além de fazer a conexão com o banco de dados também executa outras tarefas comuns dos meus sistemas. Vou te dar um exemplo da utilização:

 

 

classe objetoPadrao
{
	private $dbConn;
	public function __construct()
	{
		 $dbConn =& dbObject::getInstance();
	}
}
classe Auth extends objetoPadrao()
{
	public function __construct()
	{
		 parent::__construct();
	 }
	 public function checaLogin($user, $pass)
	 {
			// executa verificacao se login já foi feito
		   $this->dbConn->query('sql que pesquisa user no banco'); // apenas um exemplo de como pesquiso no banco de dados dessa maneira
	 }
}
class dbObject
{
	private static $instance;
	public static function getInstance() // verifica se o objeto ja foi instanciado. se sim, retorna o objeto. se não o estancia.
	{
		if (!isset(self::$instance)) {
			$c = __CLASS__;
			self::$instance = new $c;
		}

		return self::$instance;
	}
}

É mais ou menos assim que eu faço....

 

Espero ter ajudado...

abçs!

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.