+4

Usando O.O. em PHP

criado por Wonder Alexandre em 02/11/2003 9:37pm
<?
/**
 * Autor : Wonder Alexandre Luz Alves
 * Data  : 27/10/2003
 * Desc  : Objeto para se conectar com o banco de dados mysql...
 */

Class ConexaoMysql
{
    ////////////////Atributos da class//////////////////
    var $servidor="localhost";
    var $usuario="root";
    var $senha="";
    var $banco="conectasur";
    var $query="";
    var $link="";
	
    ////////////////Metodos da classe///////////////
    // Metodo Contrutor
    function ConexaoMysql()
    {		
        $this->conexao();
    }

    // Metodo conexao com o banco
    function conexao()
    {
        $this->link = mysql_connect($this->servidor,$this->usuario,$this->senha);
        if (!$this->link) {
            die("Error na conexao");
        } elseif (!mysql_select_db($this->banco,$this->link)) {
            die("Error na conexao");
        }
    }

    // Metodo sql
    function sql($query)
    {
        $this->query = $query;
        if ($result = mysql_query($this->query,$this->link)) {
            return $result;
        } else {
            return 0;
        }
    }	

    // Metodo que retorna o ultimo id de um inserção
    function id()
    {
        return mysql_insert_id($this->link);
    }

    // Metodo fechar conexao
    function fechar()
    {
        return mysql_close($this->link);
    }
}
/////////////////FIM DA CLASSE////////////////
?>

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 (~18 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 (~18 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 (~18 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 (~18 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 (~18 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 (~20 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 (~21 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 (~21 anos atrás)

Novo Comentário:

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