+4

Usando O.O. em PHP

criado por Wonder Alexandre em 02/11/2003 9:37pm
Usando a class ConexaoMysql

<html>
<head><title>OO em PHP</title></head>
<body>
<br>
<?
//Instanciando um objeto
$ObejtoConexao = new ConexaoMysql();
	
//preenchendo a combo com uma consulta
echo "<select name='teste'>";
$result = $ObejtoConexao->sql("select * from tabela");
while($lista = mysql_fetch_array($result)) {
    echo "<option value='$lista[xxxx]'>$lista[xxxx]</option>";
}
echo "</select>";
	
//Chendo o link com banco de dados
$ObejtoConexao->fechar();
	
?>
</body>
</html>

Comentários:

Mostrando 1 - 10 de 31 comentários
Tenho algumas dúvidas, primeiro não entendi pra que serve o método construtor, ele apenas inicializa outra função da classe, chamada conexao(), pra que fazer isso? E na segunda função por que sql($query) e não,
sql($this->query), qual a diferença??
05/01/2007 10:27am (~17 anos atrás)

Juan Basso disse:
Achei legal seu artigo pra quem está começando, mas eu sugeriria você colocar um construtor mais flexivel, pois, se tratando de OO, temos que tornar a classe a mais independente possível do sistema.
Ou seja, na sua classe, você pode apenas utilizar um único banco, num determinado servidor.
Veja como eu sugiro:

<?
class ConexaoMysql
{
var $servidor;
var $usuario;
var $senha;
var $banco;
var $link;

function ConexaoMysql($servidor="localhost", $usuario="root", $senha="", $banco="orcamento"){
$this->servidor = $servidor;
$this->usuario = $usuario;
$this->senha = $senha;
$this->banco = $banco;

$this->conexao();
}

...
?>


Outras colocações:
- Na hora da execucação da query, faça um if para verificar a existência ou não do link ainda, pois ele já pode ter sido desfeito (executado o método fechar) ou mesmo ter caido a conexão;
- Esse jeito que apresentei está mais flexivel, mas note que coloquei constantes ali na atribuição que caracterizam ainda o sistema, mas agora ela pode ser alterada;
- Acredito que desta maneira o pessoal que estava com dúvida em relação ao $this ficou um pouco mais claro, ou seja, podemos ter variáveis locais (dentro do método) e de classe (dentro da classe) com mesmo nome, porém, as da classe são acessadas APENAS com a utilização do $this.

Acho que é isso.
30/09/2006 1:23pm (~17 anos atrás)

Para que não haja dúvida a minha calsse conexao esta definida com letra minuscula mesmo tah bom ?
obrigadoo !
29/08/2006 12:59pm (~17 anos atrás)


Fatal error: Cannot access empty property in C:\Arquivos de programas\xampp\htdocs\PHP Orientado Objeto\conexao.php on line 15

Vou colocar o meu código também e gostaria que ajudasse!

<<Classe Conexao.php>>

<?
class ConexaoMysql
{
var $servidor = "localhost";
var $usuario = "root";
var $senha = "";
var $baco = "orcamento";
var $query = "";
var $link = "";

function ConexaoMysql(){
$this->conexao();
}
function conexao(){
$this->$link = mysql_connect($this->servidor, $this->usuario);
if (!$this->link){
die ("Error na conexão");
}elseif(!mysql_select_db($this->banco,$this->link)){
die("Erro na conexão");
}
}
function sql($query){
$this->query = $query;
if ($result = mysql_query($this->query, $this->link)){
return $result;
}else{
return 0;
}
}
function id(){
return mysql_insert_id($this->link);
}
function fechar(){
return mysql_close($this->link);
}

}
?>

<<Classe mostrar_campos.php>>

<html>
<? include("conexao.php");?>
<body>
<br>
<?
$objetoConxao = new ConexaoMysql;
echo "<select name='teste'>";
$result = $objetoConexao->sql("SELECT * FROM usuario");
echo $query;
echo $result;
while ($lista = mysql_fetch_array($result) ){
echo "<option value='$lista[login]'> $lista[login]</option>";
}
echo "</select>";
$objetoConexao->fechar();
?>
</body>
</html>

Obrigado pela atenção!!
29/08/2006 12:57pm (~17 anos atrás)

Felipe Sander disse:
eu estava olhando o modo como você declarou as variáveis e notei que assim não funciona em php4, somente utilizando um construtor, de acordo com o manual: http://br.php.net/manual/pt_BR/language.oop.php

Correto?
18/08/2006 1:06pm (~17 anos atrás)

fernando disse:
Encontrei um problemão em uma classe que eu uso e é parecida com esta que vc apresentou.

E se instanciarmos 2 objetos diferentes da mesma classe o segundo obseto sobrepões a conexão do primeiro objeto.

Exemplo:

$conexão1 = new minhaclasse("bancodedados1");
$conexão2 = new minhaclasse("bancodedados2");

Acima acontece o seguinte, o objeto $conexão2 vai sobreescrever a estring de conexão da $conexão1.

O objeto $conexão1 vai abrir o "bancodedados2" e não o "bancodedados1".

[]s
08/06/2006 12:35pm (~18 anos atrás)

É uma classe simples porém eficáz, eu estou utilizando ela e adiata bem o meu lado.
20/04/2006 7:18am (~18 anos atrás)

Rafael Torres disse:
Quando se instancia um objeto, os valores iniciais das propriedades não devem ser atribuídos diretamente a elas, como feito no script. O correto é utilizar um construtor e dentro dele atribuir os valores. Da forma como foi feito pode até funcionar, mas não é a maneira certa de fazer isso, ok!

Errado:
var $usuario = "root";

Certo (colocar dentro do construtor):
$this->usuario = "root";
27/10/2004 2:52pm (~19 anos atrás)

this e uma palavra chave que se refere a este, se vc estiver contruindo uma class e criar algums metodos e atributos e vc quer usar esses metodos e atributos dentro de outros metodos vc usa o this->nomeDoMetodo. Quer dizer q vc esta referindo ao objeto q esta na class atual. Ou seja vc esta usando o metodo q esta na class atual.

um Objeto e parecido como um variavel, sendo q cada variavel e diferente da outra. o objeto tb e a mesma coisa cada objeto e diferente do outro, sendo assim $this se refere a um unico objeto, o obejto q vc esta utilizando no momento
19/11/2003 6:34am (~20 anos atrás)

Yuri Alvim disse:
Gostaria de saber como funciona a passagem de parametros em OO. o objeto é sempre visto mesmo mudando de tela? ou é preciso passar do mesmo modo os valores(POST ou GET)?
N entendo muito bem como funciona isso...

Tb n entendo muito como funciona o $this.Por exemplo,se eu tiver instanciado 2 objetos de 2 classes diferentes...o $this se refere A QUE?
17/11/2003 1:12pm (~20 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)