Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Salve Galera!!
To começando e estruturar um projeto com PHP e OOP e estou tendo algumas dificuldades, gostaria se possivel uma ajuda.
Hoje estruturo meus objetos da forma abaixo:
<?phpclass consulta{ var $celular = array("9", "8", "7"); var $arquivo = " "; var $telefone = " "; var $host = "localhost"; var $user = "root"; var $pass = ""; var $db = "meudatabase"; var $q = ""; var $r = ""; var $reg = ""; var $aberto; var $linha = " "; var $nome = " "; var $c = 1; function consulta($arquivo = ""){ if($arquivo != ""){ $this->arquivo = $arquivo; } } function conexao($db){ if($db == "lista"){ mysql_connect($this->host, $this->user, $this->pass); mysql_select_db($this->db); } } #F2F2F2#EAEAEA function pesquisar($arquivo = ""){ if($arquivo != ""){ $this->conexao("lista"); $this->arquivo = $arquivo; $this->aberto = fopen($this->arquivo, "r"); echo " <p class='text'><b>Resultado da pesquisa:</b></p> <table border='1' width='100%'> <tr align='center' bgcolor='#EAEAEA' class='text' height='25' valign='middle'> <td><b>Nome</b></td> <td><b>Telefone</b></td> <td><b>Endereço</b></td> <td><b>Bairro</b></td> <td><b>CEP</b></td> <td><b>Cidade</b></td> <td><b>UF</b></td> </tr> "; while(!feof($this->aberto)){ $this->linha = fgets($this->aberto); list($this->nome, $this->telefone) = explode(";", $this->linha); $this->telefone = $this->preparar_telefone($this->telefone); if(!in_array(substr($this->telefone, 0, 1), $this->celular)){ $this->q = "SELECT * FROM ddd11 WHERE Telefone = '{$this->telefone}';"; $this->r = mysql_query($this->q); $this->reg = mysql_fetch_array($this->r); echo "<tr valign='middle' class='text' height='20' align='center' bgcolor='",(($this->c % 2 == 0 ) ? "#F2F2F2" : "#FFFFFF"),"'> <td class='text'>",$this->inicial_maiuscula($this->nome), "</td> <td class='text'>",$this->telefone, "</td> <td class='text' align='left'>",$this->inicial_maiuscula($this->reg['Endereco']), "</td> <td class='text'>",$this->inicial_maiuscula($this->reg['Bairro']), "</td> <td class='text'>",$this->cep_formatado($this->reg['CEP']), "</td> <td class='text'>",$this->reg['Cidade'], "</td> <td class='text'>",$this->reg['UF'], "</td> </tr>"; $this->c++; } } echo "</table>"; fclose($this->aberto); } } function inicial_maiuscula($texto){ return substr($texto,0,1).strtolower(substr($texto, 1, (strlen($texto) - 1))); } function preparar_telefone($telefone){ $telefone = str_replace("(11)", "", $telefone); $telefone = str_replace("-", "", $telefone); $telefone = str_replace(".", "", $telefone); $telefone = str_replace("/", "", $telefone); $telefone = str_replace("(", "", $telefone); $telefone = str_replace(")", "", $telefone); return $telefone; } function cep_formatado($cep = ""){ if($cep != ""){ return substr($cep, 0, 5)."-".substr($cep, 5, 3); } }}#end class;?>
Queria saber se está errado ? O que isso influencia na performace ? Como criar objetos mais diretos e objetivos ? Como programar para funcionar bem na versão 4 e 5 do PHP ?
[]s
seria melhor você definir classes distintas para cada trabalho, exemplo uma classe para conexao e outra classe para pesquisa, e nao do jeito que você fez tudo junto
Hum... gostei Srº Fabyo...Dá uma aula de exemplos por favor!!! se tiver abusando é só falar [http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif ]
seria melhor você definir classes distintas para cada trabalho, exemplo uma classe para conexao e outra classe para pesquisa, e nao do jeito que você fez tudo junto
Eu fiz um meio curso sobre iniciando com classe
http://forum.imasters.com.br/index.php?showtopic=167562
num sei se está bom tou esperando o fabão dar uma olhada para ver se eu num pequei em alguma coisa la.. :P
e o que o fabyo quiz dizer é o seguinte... ex:
class SQL {var $select;function SQL($host,$db,$user,$senha){return ($conect = mysql_connect($host,$user,$senha))? mysql_select_db($conect):false;}function Execute($sql){return ($this->select = mysql_query($sql))? $this->select :false;}function fields(){return ($l = mysql_fetch_array($this->select))? $l:false;}}$db = new SQL("localhost","escola","root","");$db->Execute("select * from tabela");while($l = $db->fields()){echo $l["nome"];}
Assim eu tenho uma classe de conexão ao db com comando do db assim sendo possivel depois eu poder atribuir meu sistema todo para outros db apenas mudando essa classe e não o sistema todo =)
um exemplo simples
config.php:
<?php
define("SERVIDOR", "localhost");
define("USUARIO", "root");
define("SENHA", "");
define("BANCO", "banco");
?>
conexao.php
class conexao
{
var $cnn;
function Abrir() if($this->cnn = @mysql_connect(SERVIDOR, USUARIO, SENHA)) {
//mysql_select_db Retorna TRUE em caso de sucesso ou FALSE em falhas.
return mysql_select_db(BANCO);
} else {
unset($this->cnn);
return false;
}
}
function Fechar() return isset($this->cnn) ? mysql_close() : false;
}
}
comando.php
class comando extends conexao
{
function query($sql)
{
if($this->Abrir()) {
if($re = mysql_query($sql)){
$this->Fechar();
return $re;
}
} else {
echo mysql_error();
exit;
}
}
}
modo de usar:
teste.php
include "config.php";
include "conexao.php";
include "comando.php";
$com = new comando();
$re = $com->query("select * from tabela");
while($l = mysql_fetch_array($re)) {
echo $l["campo"];
}
?>
isso é só um pontapé inicial, apartir dai você vai expandindo suas classes, colocando um sistema de tratamento de erros melhor, porque mostrar erro de conexao para o usuario é chato, o erro tem que ser tratado e mostrado outra mensagem
e por ai vai, você pode montar uma classe de comando sql melhor e maior com fetch_array e fetch_objetc etc...
se fosse só pra php5 dai sim seria uma classe bem feita e funcional
com tratamentos de erros de verdade, debuger, etc...
isso é só um pontapé inicial, apartir dai você vai expandindo suas classes, colocando um sistema de tratamento de erros melhor, porque mostrar erro de conexao para o usuario é chato, o erro tem que ser tratado e mostrado outra mensageme por ai vai, você pode montar uma classe de comando sql melhor e maior com fetch_array e fetch_objetc etc...se fosse só pra php5 dai sim seria uma classe bem feita e funcionalcom tratamentos de erros de verdade, debuger, etc...
Legal velho, dá até pra começar a desenvolver meu próprio framework (hehehe imagina so)!!Mas valeu cara, MUITO OBRIGADO!!Já me ajudou pra caramba!Abraço[]s
Tudo o que estás fazendo funciona em PHP4 e PHP5.É bom ter uma classe para validar os dados do formulário, tratar os erros e trabalhar com BD.