Usando O.O. em PHP
O Estudo de caso escolhido para mostrar a construção da classe e um objeto que se conectar com o banco de dados mysql.
O objeto terá as seguintes características, terá que conectar com um banco de dados mysql, ficando conectado até o final do script, terá que guardar o comando sql da consulta e fornecer o "ID" do último registro da inserção no banco.
Necessidade do objeto ConexãoMysql:
- Atributo
o Link de conexão com o banco de dados
o Sql da última consulta
o Endereço do servidor
o Usuário do banco de dados
o Senha do usuário do banco
o Nome do banco de dados
- Métodos
o Conexão()
o Consultar()
o Id do última INSERT()
o Fechar()
O objeto terá as seguintes características, terá que conectar com um banco de dados mysql, ficando conectado até o final do script, terá que guardar o comando sql da consulta e fornecer o "ID" do último registro da inserção no banco.
Necessidade do objeto ConexãoMysql:
- Atributo
o Link de conexão com o banco de dados
o Sql da última consulta
o Endereço do servidor
o Usuário do banco de dados
o Senha do usuário do banco
o Nome do banco de dados
- Métodos
o Conexão()
o Consultar()
o Id do última INSERT()
o Fechar()
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.
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 !
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)
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?
Correto?
18/08/2006 1:06pm
(~18 anos atrás)
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
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)
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";
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
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)
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?
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)
sql($this->query), qual a diferença??