Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal depois de terminar todo meu sistema e deixa-lo funcional, resolvi partir agora para migrar ele para PHP OO.
a primeira parte já estudei e lendo varios tutoriais já criei meu arquivo de conexão em PDO, agora estou fazendo uma consulta para baixar registro do banco.
>
require_once("includes/conexao.php");
$sql = "SELECT * FROM clientes where id = '1'";
$abrir = $PDO->query( $sql );
$linhas = $result->fetchAll();
print_r($linhas);
na minha tabela eu tenho os campos, no mysql_query bastava eu fazer:
echo $nome = $linhas['nome'];
No PHP OO como eu faria?
Então o ideal é migrar para o mysqlli ao inves de ir direto para o pdo?
não é questão de ser ideal, para quantificar ou qualificar alguma coisa como bom ou ruim estamos comparando com alguma referência, um ideal do que é bom.
Eu, antes de estudar PHP, eu já estudava JAVA e ainda estudo, desse modo qualquer forma de programão que atenda ao paradigma de orientação a objetos é "ideal" pra mim. tudo que eu faço em um código está ligado à orientação a objetos, há quem discorde e prefira a maneira procedual.. o código que passei é para conexão com banco de dados mysqli com PHP usando a orientação a objetos, mysqli é uma classe que tem vários métodos extremamente úteis para tornar possível toda manipulação de dados no banco, mas não é a única maneira.. estude as opções, seja livre e faça o que for mais cômodo! Bons Estudos....
Acho que pdo é mais fácil de entender no orientado a objetos.
Primeiramente na classe conexao:
Caso haja erros de digitação, me perdoe estou pelo celular.
//vamos definir as variáveis globais como privadas
private $host;
private $dbname;
private $user;
private $pass;
private $conn;
//vamos criar um construtor para definir os dados do nosso banco de dados
function __construct(){
$this->host = "localhost";
$this->dbname = "imasters";
$this->user = "root";
$this->pass = "";$this->conectar();
}
function conectar(){$this->conn = new PDO("mysql:host=".$this->localhost."; dbname=".$this->dbname, $this->user, $this->pass);echo $ex->getMessage();
}
}
Lembrando que: Eu não usei métodos getters e setters, mas o ideal é utilizar.
Vamos para a nova classe comandos:
// Essa classe precisa do objeto conn da classe conexão, então vou usar herança para fazer isso acontecer.
require_once 'Conexao.php';
class Comandos extends Conexao {
// a partir de agora todos os objetos da classe conexão, eu tenho na classe comandos.
private $pdo;
//para esse exemplo vou usar getter e setters se precisar, depois dê uma lida sobre pois não vou declarar aqui.
function tratamentoSelect($tabela, $column, $valor){
//através dos parâmetros vamos passar as informações necessárias para fazer a consulta
$this->setPdo($this->getConn()->prepare ("SELECT * FROM ". $tabela." WHERE ".$column." = ?"));
$this->getPdo()->execute(array($valor));
}
}
Deseja saber mais o que amigo? Qualquer dúvida sinta-se avontade para citar.
James Bond. Nesse caso qual a diferença em declarar as variáveis private na classe? É usar os métodos getters e setters? São padrões de segurança também? Segue os mesmos conceitos do encapsulamento do Java? Dar mais segurança perto sistema?
James Bond. Nesse caso qual a diferença em declarar as variáveis private na classe? É usar os métodos getters e setters? São padrões de segurança também? Segue os mesmos conceitos do encapsulamento do Java? Dar mais segurança perto sistema?
São regras que existem para evitar que você possa prejudicar o código por engano, por isso existem esses métodos.As variáveis mesmo sendo privada eu posso editar elas na classe de modo normal, porém se eu tentar instanciar e editar diretamente do arquivo índex eu não irei conseguir. Somente utilizando o setter...
Então o ideal é migrar para o mysqlli ao inves de ir direto para o pdo?
Indiferente, tanto MySQLi quanto PDO vão te oferecer uma boa gama de recursos (quase os mesmos) para trabalhar com um SGBD. Ambos são OO e apenas MySQLi permite execução de forma procedural.
Entretanto, usar PDO ou MySQLi não garante que seu código é OO. Utilizar apenas objetos também não. Existem "mundos de diferença" quanto a isso.
Orientação à objetos é basicamente uma filosofia. Utilizar objetos é apenas uma fração da orientação à objetos e a reutilização é uma consequência, que pode ser considerado um objetivo primário.
Sempre que pensar em orientação à objetos, tenha em mente a seguinte frase: "A orientação de objetos tem como objetivo transformar a programação o mais próxima possível do mundo real".
Quanto a como usar uma conexão, existem um trilhão de exemplos de como usar ou não usar, desde patterns (DAO, DataMapper, TableDataGateway/RowDataGateway) até bibliotecas (Doctrine).
James Bond. Nesse caso qual a diferença em declarar as variáveis private na classe? É usar os métodos getters e setters? São padrões de segurança também? Segue os mesmos conceitos do encapsulamento do Java? Dar mais segurança perto sistema?
São regras que existem para evitar que você possa prejudicar o código por engano, por isso existem esses métodos.
Para ambos os casos, leitura sobre encapsulamento:
http://forum.imasters.com.br/topic/551854-duvidas-object-calisthenics-em-php/?p=2202368 (questionamento 4).
http://thegodclass.tumblr.com/day/2011/09/02
O desenvolvimento atual é muito focado em storages, esquecendo que quem realmente utilizará os dados, é um sistema. A forma de salvar é apenas um detalhe dentro de um "ecossistema".
As variáveis mesmo sendo privada eu posso editar elas na classe de modo normal, porém se eu tentar instanciar e editar diretamente do arquivo índex eu não irei conseguir. Somente utilizando o setter...
Princípio de Responsabilidade Única: Sua classe não deve ter mais de um motivo para ser modificada. Se toda a vez que alterar algum dado de conexão você tiver que alterar a classe, é um violação ao princípio.
>
// Essa classe precisa do objeto conn da classe conexão, então vou usar herança para fazer isso acontecer.
require_once 'Conexao.php';
class Comandos extends Conexao {
// a partir de agora todos os objetos da classe conexão, eu tenho na classe comandos.
private $pdo;
//para esse exemplo vou usar getter e setters se precisar, depois dê uma lida sobre pois não vou declarar aqui.
function tratamentoSelect($tabela, $column, $valor){
//através dos parâmetros vamos passar as informações necessárias para fazer a consulta
$this->setPdo($this->getConn()->prepare ("SELECT * FROM ". $tabela." WHERE ".$column." = ?"));
$this->getPdo()->execute(array($valor));
}
}
Verificando o contexto, um Comando não é uma conexão, a herança está sendo mal empregada.
Para falar a verdade, até hoje, não encontrei um exemplo no qual uma conexão concreta deve ser herdada. Em todos os exemplos práticos deve ser usada a injeção de dependência.
$result = mysqli->query($query);
depois para imprimir os resultados...
while(list($id, $nomeColuna1, $nomeColuna2)= $result->fetch_row())
echo $nomeCuluna1;
essa é uma das maneiras, bém simples, mas estude a classe mysqli(); conheça seus métodos e funções, depois de ter conhecido e compreendido o paradigma da Orientação a Objetos vai ver que é muito melhor e funcional!