Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Conte

Começando com PHP OO

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites
$mysqli = new mysqli();
	$mysqli->connect("host do banco", "usuario", "senha");
	if($mysqli->errno){
		printf("Houve um erro na tentativa de conectar: <br/>%s",$mysqli->error);
		exit();
	}
	//Seleciona o Banco de Dados
	$mysqli->select_db("nome do banco de dados para selecionar os dados");
O Código acima faz a conexão com o banco, para fazer a pesquisa vocÇe deve utilizar o método query() da classe mysqli() dessa forma:
$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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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....

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 = "";
//tenta conectar
$this->conectar();
}
function conectar(){
try {
$this->conn = new PDO("mysql:host=".$this->localhost."; dbname=".$this->dbname, $this->user, $this->pass);
} catch(Exception $ex){
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.