Ir para conteúdo

POWERED BY:

Arquivado

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

Will Fernando

[Resolvido] classe

Recommended Posts

opa galera assim.. duvidazin sobre POO .. se defino uma var como public segnifica que ela nao eh privada da classe neh ? entao ela poderia ser acessada de fora ? *mais especificadamente de outra classe ? caso sim como eu poderia fazer isto ?

 

ex:

 

class Test{
public $a;
function Poen($b)
{
$this->a = $b;
//return $this->a;
}
}
class TestB{
function Mostra(){
echo //comeh q eu pego a variavel $a da otra classe?
}
}

valww

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha esse exemplo

 

<?

// definição da classe Pessoa

class Pessoa{

public $nome;

public $idade;

public $sexo;

}

 

// definicao da classe Cliente

class Cliente extends Pessoa{

public $codigo;

}

 

// Cria um objeto da classe Cliente

$cliente = new Cliente();

$cliente->nome = "Alberto Marques";

$cliente->codigo = 44664;

 

// Exibe os dados

echo $cliente->nome . "<br>";

echo $cliente->codigo;

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

tah tipo assim... uma classe q conecta ao banco e blabla... como eu faço ali na funcao ExeSQL pra chama o $Conn ??

 

<?php
class DB{
	public $Conn;
	
		function ConectaDB($host,$user,$pass)
			{
				$this->Conn = mysql_connect($host,$user,$pass) or die('<strong>Não Foi Possivel Conectar ! Verifique os Dados da Conexao !</strong>');
				//return $this->Conn;
			}
		function SelecionaDB($banco)
			{
				mysql_select_db($banco,$this->Conn) or die('<strong>Não Foi Possivel Selecionar a Tabela ! Verifique se o Nome da Tabela está Correto !</strong>');
			}
		
		}
		
class FazDB extends DB{
	private $query;
			function ExeSQL($sql)
				{
					mysql_query($sql, >>> AKII VAE O CONN DA CLASSE DB <<< ) or die('<strong>Não Foi Possivel Executar Sua Instrução SQL ! Possivelmente ela esta Erra !</strong>');
				}
			//function LinhaDB
				//{
					//mysql_fetch_array(
				//}
}

// aki eh os testes 
$sql_seleciona = "SELECT * FROM noticias";
$a = new DB;
$a->ConectaDB('localhost','root','');
$a->SelecionaDB('test');
$b =  new FazDB;
$b->ExeSQL($sql_seleciona);
?>

valwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estava vendo no teu tópico no scriptBrasil e ia já dizer que você estava confundindo essa questão de public/private/protected com herança. Vi la que você definia uma variável (atributo) público numa classe e queria resgatar na outra.

 

Legal

public = você declara uma variável ou uma função, e aí ela pode ser acessada de dentro[ex1], de fora[ex2] ou em uma classe que herda[ex3] a que você definiu.

ex1

class teste{
 public $nome

 public function setNome($valor){
   $this->nome =$valor;
 }
}

ex2

class teste{
 public $nome

 public function setNome($valor){
   $this->nome =$valor;
 }
}

$nada = new teste();
$nada->nome = "O fulano";

Perceba que aí é roubada, porque você consegue resgatar e atribuir valor a um atributo, sem usar os métodos da classe, logo não tem garantias que está sendo usado adequadamente.

 

ex3

class teste{
 public $nome

 public function setNome($valor){
   $this->nome =$valor;
 }
}

// teste2 vai ter tudo que tem em teste + o que você definir dentro de teste2
class teste2 extends teste{
 public $sobrenome;

 public setSobrenome($valor){
   $this->sobrenome = $valor;
 }

 public getNomeTodo(){
	return ($this->nome.' '.$this->sobrenome); 
 }
}

$ops = new teste2();
$ops->setNome("Alfredo");
$ops->setSobrenome("Maria");
echo($ops->getNomeTodo());

Aí você está "acessando uma variável" dentro de uma outra classe. Mas isso só por herança. Se "$nome" estivesse "private" não daria para fazer isso. O ideal é fazer atributos e métodos "protected" que esses podem ser acessados de dentro da classe e por quem herda ela. De fora da classe como em ex2 não da certo.

 

No caso da conexão com o BD daria para fazer uma classe que conecta e outra que extende a conexão e executa as querys e trata o retorno.

 

Mais ou menos isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os códigos acima não foram testados, tinha que testar...

 

ficaria:

 

<?php
class DB{
	public $Conn;
	
		function ConectaDB($host,$user,$pass)
			{
				$this->Conn = mysql_connect($host,$user,$pass) or die('<strong>Não Foi Possivel Conectar ! Verifique os Dados da Conexao !</strong>');
				//return $this->Conn;
			}
		function SelecionaDB($banco)
			{
				mysql_select_db($banco,$this->Conn) or die('<strong>Não Foi Possivel Selecionar a Tabela ! Verifique se o Nome da Tabela está Correto !</strong>');
			}
		
		}
		
class FazDB extends DB{
	private $query;
			function ExeSQL($sql)
				{
					mysql_query($sql,$this->Conn) or die('<strong>Não Foi Possivel Executar Sua Instrução SQL ! Possivelmente ela esta Erra !</strong>');
				}
			//function LinhaDB
				//{
					//mysql_fetch_array(
				//}
}

// aki eh os testes
$sql_seleciona = "SELECT * FROM noticias";
$a = new DB;
$a->ConectaDB('localhost','root','');
$a->SelecionaDB('test');
$b =  new FazDB;
$b->ExeSQL($sql_seleciona);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

class Primeira extends Segunda { ... }

 

Se uma classe extende a outra significa que todas as propriedades e métodos da classe que foi extendida (Segunda) vão passar a existir na casse que está extendendo (Primeira), ou seja, você vai poder usar $this para acessar propriedades/métodos da Segunda classe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim sim .. eu tinha intendido isso de herança ja ... mas eh que eu testei com $this->Conn e deu erro dai eu testei so com $Conn e deu erro tambem...

 

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\xampp\htdocs\test\class_will.php on line 35
Não Foi Possivel Executar Sua Instrução SQL ! Possivelmente ela esta Erra !
agora eu copiei e colei o script corrigido que voce passo e tambem nao ta funfando O.o ?

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\xampp\htdocs\test\class_will.php on line 35
Não Foi Possivel Executar Sua Instrução SQL ! Possivelmente ela esta Erra !

<?php
class DB{
	public $Conn;
	
		function ConectaDB($host,$user,$pass)
			{
				$this->Conn = mysql_connect($host,$user,$pass) or die('<strong>Não Foi Possivel Conectar ! Verifique os Dados da Conexao !</strong>');
				//return $this->Conn;
			}
		function SelecionaDB($banco)
			{
				mysql_select_db($banco,$this->Conn) or die('<strong>Não Foi Possivel Selecionar a Tabela ! Verifique se o Nome da Tabela está Correto !</strong>');
			}
		
		}
		
class FazDB extends DB{
	private $query;
			function ExeSQL($sql)
				{
					mysql_query($sql,$this->Conn) or die('<strong>Não Foi Possivel Executar Sua Instrução SQL ! Possivelmente ela esta Erra !</strong>');
				}
			//function LinhaDB
				//{
					//mysql_fetch_array(
				//}
}

// aki eh os testes
$sql_seleciona = "SELECT * FROM noticias";
$a = new DB;
$a->ConectaDB('localhost','root','');
$a->SelecionaDB('test');
$b =  new FazDB;
$b->ExeSQL($sql_seleciona);
?>

to testando em localhost

 

phpinfo()

PHP Version 5.2.8

valww

 

ta na minha hora ... amanha eu entro dnovo ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

se fizer isso:

// aki eh os testes
$sql_seleciona = "SELECT * FROM noticias";
$b =  new FazDB;
$b->ConectaDB('localhost','root','');
$b->SelecionaDB('test');
$b->ExeSQL($sql_seleciona);

porque se não você tem objetos ($a e $b diferenetes) e $b não tem ainda uma conexão.

 

Outra coisa que da para explorar nesses scripts assim é o método construtor e destrutor da classe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

uhum .. beleza consegui aqui... fiz dai a classe de conexao (DB) como o helton disse.. usando __construct e coloquei um __destruct com mysql_close .. valww ^^

 

 

[Resolvido]

 

=] valw ae galera !

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.