Qual a melhor forma de se trabalhar com resultados de B.D. em O.O.
Tenho um conhecimento legal em O.O., mas estou com uma dúvida para utilizar O.O. e resultados de banco de dados.
Devo deixar os comandos SQL dentro ou fora do método?
É que se eu deixar o comando dentro, vai facilitar para fazer a manutenção no site caso seja necessário, sem contar que poderei reaproveitar o que já fiz em outros sites.
O problema é: Como fazer para deixar dentro do método de forma a usar a mesma quantidade de processamento da máquina(uso de memória, velocidade de resposta, etc.) que em métodos comuns (sem uso de O.O.)?
Devo deixar os comandos SQL dentro ou fora do método?
É que se eu deixar o comando dentro, vai facilitar para fazer a manutenção no site caso seja necessário, sem contar que poderei reaproveitar o que já fiz em outros sites.
O problema é: Como fazer para deixar dentro do método de forma a usar a mesma quantidade de processamento da máquina(uso de memória, velocidade de resposta, etc.) que em métodos comuns (sem uso de O.O.)?
comentários (0)
suspender
Lista de Respostas:
08/08/2003 11:09am
(~21 anos atrás)
(~21 anos atrás)
Usando OO, você nunca conseguirá chegar a mesma velocidade de processamento e utilização de recursos que você tem usando procedural... ainda mais em PHP. :)
08/08/2003 12:49pm
(~21 anos atrás)
(~21 anos atrás)
Ahhhh
Yo no creo!
Como és possible?
OO no PHP não vale a pena cara? Are you sure?
Bom, mas a questão é essa....
como fazer isso com funções ou O.O.?
while (nº de registros){
funcaoRetornaRegistro();
}
Yo no creo!
Como és possible?
OO no PHP não vale a pena cara? Are you sure?
Bom, mas a questão é essa....
como fazer isso com funções ou O.O.?
while (nº de registros){
funcaoRetornaRegistro();
}
09/08/2003 3:52pm
(~21 anos atrás)
(~21 anos atrás)
Pelo que entendi o que vc quer é criar uma interface para o BD.
Para o que vc pediu o numero de registros para ODBC nao funciona mas no mysql tem mysql_affected_rows e mysql_num_rows que te retornam o numero de linhas de um update delete ou select sobre a funcao que retorna ora ora é apenas mysql_fetch_...
Vc poderia criar essas definições em um arq separado tipo um driver JDBC mas se é isso que vc quer usa a classe pearDB.
okz?
Espero ter ajudado
Para o que vc pediu o numero de registros para ODBC nao funciona mas no mysql tem mysql_affected_rows e mysql_num_rows que te retornam o numero de linhas de um update delete ou select sobre a funcao que retorna ora ora é apenas mysql_fetch_...
Vc poderia criar essas definições em um arq separado tipo um driver JDBC mas se é isso que vc quer usa a classe pearDB.
okz?
Espero ter ajudado
10/08/2003 2:32pm
(~21 anos atrás)
(~21 anos atrás)
Cara, pode utilizar OO pois a diferenca de performance é imperceptível.
10/08/2003 10:42pm
(~21 anos atrás)
(~21 anos atrás)
Pode usar tranquilo OOP no php,
nunca vi diferença de processamento. Somente se programar errado.
Uma forma que uso bastante é criar classes simples para conexão e retorno de valores, passando somente o sql para que meus métodos façam o resto.
Eu costumo deixar os métodos responsáveis pelas tarefas, mas não costumo deixar os sqls dentro dos métodos (fui claro?).
Em breve irei publicar um artigo sobre o assunto.
Me animei para agilizar esse artigo, pois terei argumentos para comentar sobre isso.
Espero ter ajudado.
nunca vi diferença de processamento. Somente se programar errado.
Uma forma que uso bastante é criar classes simples para conexão e retorno de valores, passando somente o sql para que meus métodos façam o resto.
Eu costumo deixar os métodos responsáveis pelas tarefas, mas não costumo deixar os sqls dentro dos métodos (fui claro?).
Em breve irei publicar um artigo sobre o assunto.
Me animei para agilizar esse artigo, pois terei argumentos para comentar sobre isso.
Espero ter ajudado.
11/08/2003 2:54pm
(~21 anos atrás)
(~21 anos atrás)
Quanto a trabalhar com resultados do BD, eu não vejo mal nenhum em ter os SQLs, dentro dos métodos, visto que na maioria dos casos você não consegue reaproveitar um mesmo SQL para métodos diferentes.
Saindo um pouco do tópico. :) O PHP possui recursos de OO mas não é uma linguagem OO. Por causa disso e outros detalhes, que o custo de processamento e memória com a utilização de objetos no PHP é alto. Provavelmente em um website simples não faça diferença no servidor, mas numa aplicação de média para grande faz diferença. Esse cuidado com a utilização da memória e outros detalhes é para ser corrigidos no PHP5.
na conclusão ele diz: "Object Oriented design and programming can be extremely useful in PHP when used appropriately and with moderation.":
http://www.horde.org/papers/kongress2002-design_patterns/
Saindo um pouco do tópico. :) O PHP possui recursos de OO mas não é uma linguagem OO. Por causa disso e outros detalhes, que o custo de processamento e memória com a utilização de objetos no PHP é alto. Provavelmente em um website simples não faça diferença no servidor, mas numa aplicação de média para grande faz diferença. Esse cuidado com a utilização da memória e outros detalhes é para ser corrigidos no PHP5.
na conclusão ele diz: "Object Oriented design and programming can be extremely useful in PHP when used appropriately and with moderation.":
http://www.horde.org/papers/kongress2002-design_patterns/
11/08/2003 4:41pm
(~21 anos atrás)
(~21 anos atrás)
"Plac! Plac! Plac! Plac! Plac!"
Palmas para eles! =)
Alexandre, entendi muito bem o que você quis dizer sim.
Aliás, é a conclusão que estou chegando, pois não encontrei uma solução viável.
Estou há algum tempo desenvolvendo uma metodologia de se trabalhar com orientação a objeto de forma a tornar meus códigos reaproveitáveis. Talvez a solução seja usar includes (apesar de não gostar da idéia).
André, a idéia é esta mesmo! Reaproveitar 100% do código de cada classe, ou seja, criar uma solução de fórum com funcionalidades fixas onde a única coisa que poderá ser alterada é o visual.
Estou cheio de casos aqui na minha empresa onde 3 clientes pedem seção IDENTICAS, mas por modelar o banco de dados espeficicamente para cada um, acabo precisando refazer tudo... um saco e uma perda de tempo incrível!
Então qual a solução que encontro?
Transformar essas funcionalidades em classes, onde o importante é a saída que os métodos dessas classes e não como é feito para chegar à ela.
O ideal seria para mim algo como:
<?php
include ("conexao.inc.php");
?>
<table>
<?php
while (! fimdosresultados ){
?>
<tr>
<td>
<?php imprimeNome(); ?>
</td>
</tr>
<?php
}
?>
</table>
Mas ainda não cheguei a uma forma legal de utilizar esse tipo de estrutura...
Palmas para eles! =)
Alexandre, entendi muito bem o que você quis dizer sim.
Aliás, é a conclusão que estou chegando, pois não encontrei uma solução viável.
Estou há algum tempo desenvolvendo uma metodologia de se trabalhar com orientação a objeto de forma a tornar meus códigos reaproveitáveis. Talvez a solução seja usar includes (apesar de não gostar da idéia).
André, a idéia é esta mesmo! Reaproveitar 100% do código de cada classe, ou seja, criar uma solução de fórum com funcionalidades fixas onde a única coisa que poderá ser alterada é o visual.
Estou cheio de casos aqui na minha empresa onde 3 clientes pedem seção IDENTICAS, mas por modelar o banco de dados espeficicamente para cada um, acabo precisando refazer tudo... um saco e uma perda de tempo incrível!
Então qual a solução que encontro?
Transformar essas funcionalidades em classes, onde o importante é a saída que os métodos dessas classes e não como é feito para chegar à ela.
O ideal seria para mim algo como:
<?php
include ("conexao.inc.php");
?>
<table>
<?php
while (! fimdosresultados ){
?>
<tr>
<td>
<?php imprimeNome(); ?>
</td>
</tr>
<?php
}
?>
</table>
Mas ainda não cheguei a uma forma legal de utilizar esse tipo de estrutura...
12/08/2003 7:07am
(~21 anos atrás)
(~21 anos atrás)
Bom gustavo, a maneira como retorno meus selects por exemplo, é usando arrays, algo assim:
<?
// classe
class Blah
{
function Blah()
{
// seta algumas infos
}
function getInfoSeila()
{
// conecta
$sql = "SELECT * FROM tabela";
return $db->getAll($sql, DB_FETCHMODE_ASSOC); // usando o PEAR DB eu consigo retornar arrays associativos...
}
}
?>
<?
// instancia a classe
// chama o método
$list = Blah::getInfoSeila(); // dependendo da situação, uso métodos estáticos mesmo...
neste momento, eu passo o array pro Smarty e ele se vira em mostrar a encrenca! :)
?>
Isso apesar não ter uma orientação a objetos 100% deixa o código muito limpo e fácil de reaproveitar...
<?
// classe
class Blah
{
function Blah()
{
// seta algumas infos
}
function getInfoSeila()
{
// conecta
$sql = "SELECT * FROM tabela";
return $db->getAll($sql, DB_FETCHMODE_ASSOC); // usando o PEAR DB eu consigo retornar arrays associativos...
}
}
?>
<?
// instancia a classe
// chama o método
$list = Blah::getInfoSeila(); // dependendo da situação, uso métodos estáticos mesmo...
neste momento, eu passo o array pro Smarty e ele se vira em mostrar a encrenca! :)
?>
Isso apesar não ter uma orientação a objetos 100% deixa o código muito limpo e fácil de reaproveitar...
12/08/2003 5:36pm
(~21 anos atrás)
(~21 anos atrás)
Muito fera!
Era bem isso que eu queria saber!!!
Valeu msm!
Abraço.
Era bem isso que eu queria saber!!!
Valeu msm!
Abraço.
12/08/2003 5:54pm
(~21 anos atrás)
(~21 anos atrás)
André, só mais uma coisa...
Desse modo q vc faz não vai acabar acessando a memória 2 vezes?
Se fizer:
function Usuario(){
while ($rs = mysql_fetch_array($query)){
$nome[$contador] = $rs["user_nome"];
}
return ($nome)
}
e depois fizer outro loop para recuperar os valores, uso 2 vezes o processamento da máquina, entende?
Foi justamente aí que parei pois vai fazer 2 vezes um processamento que quando usamos diretamente mysql_fetch_array usaria só uma vez fica complicado...
Desse modo q vc faz não vai acabar acessando a memória 2 vezes?
Se fizer:
function Usuario(){
while ($rs = mysql_fetch_array($query)){
$nome[$contador] = $rs["user_nome"];
}
return ($nome)
}
e depois fizer outro loop para recuperar os valores, uso 2 vezes o processamento da máquina, entende?
Foi justamente aí que parei pois vai fazer 2 vezes um processamento que quando usamos diretamente mysql_fetch_array usaria só uma vez fica complicado...
13/08/2003 8:03am
(~21 anos atrás)
(~21 anos atrás)
Sim, mas daí a única saída(que vejo) para não ter processamento 2x, é misturando html e código php...
No entanto, considerando que um destes processamentos é direto com memória, pois o resultado está no array, e considerando que normalmente para retorno de grandes resultados você tem uma páginação(que acaba retornando poucos registros), você não tem uma perda grande de performance...
No entanto, considerando que um destes processamentos é direto com memória, pois o resultado está no array, e considerando que normalmente para retorno de grandes resultados você tem uma páginação(que acaba retornando poucos registros), você não tem uma perda grande de performance...
13/08/2003 10:54pm
(~21 anos atrás)
(~21 anos atrás)
MARAVILHA!!!
BINGO!!!
Era isso q eu queria saber.... simples, não?
POW... Vcs são foda =)
Valeu andré!
BINGO!!!
Era isso q eu queria saber.... simples, não?
POW... Vcs são foda =)
Valeu andré!
21/08/2003 10:48am
(~21 anos atrás)
(~21 anos atrás)
Não entendo André, diz que é pesado usar clases no php e comenta do pear db.
O pear db que é muito pesado, milhares de linhas só para tratar erros. Se fizer classes pequenas não terá tanta perda de memória assim.
No caso do php 5 a diferença será menor de usar ou não usar classes no quesito de memória, porque ambas consumirao mais memória.
Pois o fato de as classes terem tipos diferentes aumenta em muito o consumo no processamento de scripts.
Mas isso é uma discussão que foge muito do escopo.
O pear db que é muito pesado, milhares de linhas só para tratar erros. Se fizer classes pequenas não terá tanta perda de memória assim.
No caso do php 5 a diferença será menor de usar ou não usar classes no quesito de memória, porque ambas consumirao mais memória.
Pois o fato de as classes terem tipos diferentes aumenta em muito o consumo no processamento de scripts.
Mas isso é uma discussão que foge muito do escopo.
13/09/2003 10:14pm
(~21 anos atrás)
(~21 anos atrás)
07/10/2004 1:49am
(~20 anos atrás)
(~20 anos atrás)
Interessante dar uma olhada em
www.phpclasses.org/metabase
www.phpclasses.org/metabase