Buscar

CCT0882_3


Prévia do material em texto

TECNOLOGIAS WEB II - CCT0882
Semana Aula: 3
Unidade 2 - Programação orientada a objetos
Tema
Desenvolvimento de programas em PHP utilizando a programação orientada a objetos.
Palavras-chave
Orientação a Objetos, PHP, HTML 5
Objetivos
O aluno deverá ser capaz de:
Conhecer, entender e desenvolver programas utilizando os princípios básicos de 
orientação a objetos
Estrutura de Conteúdo
2.1 - Orientação a objetos
2.1.1 Definição de classe
A definição de uma classe começa com a palavra chave class, seguida do nome da classe. 
A pseudo-variável $this é uma referência ao objeto em questão.
<?php
class ClasseTeste
{
// declaração de propriedade
public $var = 'um valor padrao';
// declaração de método
public function getVar() {
echo $this->var;
}
}
?>
3.1.2 Construtores de destrutores
Construtor
Os construtores são métodos acessados quando uma classe é criada e tem como objetivo a 
inicialização das propriedades.
<?php
class BaseClass {
function __construct() {
print "Construtor da classe\n";
}
}
// In BaseClass constructor
$obj = new BaseClass(); //será exibido o texto "Construtor da classe\n"
?>
Destrutor
Será executado quando o objeto for destruído.
<?php
class BaseClass {
function __construct() {
print "Construtor da classe\n";
}
function __destruct() {
print "Destruindo o objeto \n";
}
}
// In BaseClass constructor
$obj = new BaseClass(); //será exibido o texto "Construtor da classe\n" e"Destruindo o 
objeto \n
?>
2.1.3 Visibilidade de propriedades de de métodos
Pode ser definida pelas palavras-chave: public, protected or private
onde: 
Public - pode ser acessada de qualquer lugar
Protected - Somente acessada pelo objeto epelos objetos filhos
Private - Somente acessada pelo objeto
2.1.4 Herança
É um princípio de orientação objeto, que permite que as classes "herdem" atributos e 
métodos de outras classes.
Exemplo de do uso de visibilidade de variáveis:
<?php
/**
* Define ClasseBase
*/
class ClasseBase
{
public $publica = 'Variavel publica';
protected $protegida = 'Variavel protegida';
private $privada = 'Variavel privada';
function imprimeVariaveis()
{
echo $this->publica;
echo $this->protegida;
echo $this->privada;
}
}
$obj = new ClasseBase();
echo $obj->publica; // Funciona
/*
Fatal error: Cannot access protected property ClasseBase::$protegida in objeto.php on 
line 21
*/
echo $obj->protegida;
/*
Fatal error: Cannot access private property ClasseBase::$privada in objeto.php on line 22
*/
echo $obj->privada;
$obj->imprimeVariaveis(); // Mostra todas as variaveis
/**
* Define ClasseBaseFilha
*/
class ClasseBaseFilha extends ClasseBase
{
// Pode-se redeclarar somente as propriedades públicas e protegidas
protected $protegida = 'Variavel protegida 2';
function imprimeVariaveis()
{
echo $this->publica;
echo $this->protegida;
echo $this->privada;
}
}
$obj2 = new ClasseBaseFilha();
echo $obj2->publica; // Funciona
echo $obj2->privada; // retorna undefined
/*
Fatal error: Cannot access protected property ClasseBaseFilha::$protegida in objeto.php 
on line 46
*/
echo $obj2->protegida; // retorna fatal error
$obj2->imprimeVariaveis(); // Mostra Public, Protected2, Undefined
?>
2.1.5 Classes abstratas
São classes que servem de modelo para outras classes, não sendo instanciadas. Somente 
as classes filhas serão instanciadas.
Exemplo:
<?php
abstract class PessoaAbstract
{
abstract protected function getNome();
abstract protected function setNome($nome);
abstract protected function getIdade();
abstract protected function setIdade($idade);
}
class Aluno extends PessoaAbstract
{
private $nome, $idade;
public function getNome()
{
return $this->nome;
}
public function setNome($nome)
{
$this->nome = $nome;
}
public function getIdade()
{
return $this->idade;
}
public function setIdade($idade)
{
$this->idade = $idade;
}
}
class Professor extends PessoaAbstract
{
private $nome, $idade, $matricula;
public function getNome()
{
return $this->nome;
}
public function setNome($nome)
{
$this->nome = $nome;
}
public function getIdade()
{
return $this->idade;
}
public function setIdade($idade)
{
$this->idade = $idade;
}
public function getMatricula()
{
return $this->matricula;
}
public function setMatricula($matricula)
{
$this->matricula = $matricula;
}
}
$aluno = new Aluno();
$aluno->setNome('Luiz');
echo $aluno->getNome()."<br>";
$professor = new Professor();
$professor->setMatricula('12345');
echo $professor->getMatricula();
2.2 Integração de PHP com banco de dados classe PDO
Esta classe permite a conexão do PHP com os seguintes bancos de dados:
CUBRID 
MS SQL Server 
Firebird 
IBM 
Informix 
MySQL 
MS SQL Server 
Oracle 
ODBC and DB2 
PostgreSQL 
SQLite 
4D 
Será necessário instalar os drivers correspondentes para cada banco de dados.
Sinopse da classe:
PDO {
public __construct ( string $dsn [, string $username [, string $password [, array $options 
]]] ) - Cria uma conexão com o banco
public bool beginTransaction ( void ) - Inicia uma transação
public bool commit ( void ) - Efetiva as alterações em uma transação aberta
public mixed errorCode ( void ) - Retorna o código de erro do último comando do banco
public array errorInfo ( void ) -Retorna o texto associado ao erro do último comando do 
banco
public int exec ( string $statement ) - Executa um comando SQL
public mixed getAttribute ( int $attribute ) - Recupera o atributo de conexão do banco
public static array getAvailableDrivers ( void ) - Retorna um vetor com os drivers dos 
bancos disponíveis
public bool inTransaction ( void ) - Verifica se está em uma transação
public string lastInsertId ([ string $name = NULL ] ) - retorna o último id inserido
public PDOStatement prepare ( string $statement [, array $driver_options = array() ] ) - 
Prepara o comando SQL para ser executado
public PDOStatement query ( string $statement ) - Executa uma consulta SQL e retorna o 
objeto
public string quote ( string $string [, int $parameter_type = PDO::PARAM_STR ] ) - 
Adiciona aspas simples em uma string
public bool rollBack ( void ) - Cancela a execução de um comando SQL dentro de uma 
transação
public bool setAttribute ( int $attribute , mixed $value ) - Configura atributos no banco de 
dados
}
Exemplo de conexão com o MySQL
<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
Exemplo de conexão com o PostgreSQL
<?php
$dsn = 'pgsql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
2.2.1 O Método exec
Permite executar um comando SQL e retorna a quantidade de registros que foram 
afetados pelo comando. Este comando não retorna os resultados de uma consulta.
Exemplo de inclusão:
<?php
$dsn = 'pgsql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$count = $dbh->exec("insert into aluno(matricula, nome) values('201712345', 'Luiz') ");
echo "<p>$count registro foi incluído</p>";
?>
Exemplo de atualização:
<?php
$dsn = 'pgsql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$count = $dbh->exec("update aluno set nome='Rodrigo' where marticula='201712345') 
");
echo "<p>$count registro(s) foi atualizado</p>";
?>
Exemplo de exclusão:
<?php
$dsn = 'pgsql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$count = $dbh->exec("DELETE FROM aluno WHERE matricula = '201712345'");
echo "<p>$count registro foi excluído</p>";
?>
2.2.2 O método query
Executa uma consultaSQL retornando um objeto com os resultados;.
Exemplo de consulta:
<?php
$dsn = 'pgsql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$sql = 'SELECT matricula, nome FROM aluno ORDER BY nome';
foreach ($dbh->query($sql) as $row) {
print $row['matricula'] . "\t";
print $row['nome'] . "\t";
}
?>
2.3 Desenvolvimento de um formulário para a inclusão de dados em um banco de 
dados.
Caso de uso:
Crie um programa para incluir o formulário abaixo em um banco de dados:
Dados de entrada:
Nome
Idade
Salário
Data de nascimento
2.3.1 Passo 1 - Criação da tabela no banco de dados
Após a criação do banco de dados, crie a tabela abaixo:
create table pessoa ( id serial primary key, nome varchar(100), idade integer, salario float, 
data_nascimento date) ;
2.3.2 Passo 2 - Criação de um formulário HTML 5
formulario.html
<!doctype html>
<html>
<head>
<meta charset=latin1>
<title> Formulário para inclusão de dados</title>
</head>
<body>
<form action=insere.php method=get>
<label for=nome>Nome:</label>
<input type=text id=nome name=nome placeholder="Digite seu nome">
<br><br>
<label for=idade> Idade:</label>
<input type=number id=idade name=idade placeholder="Digite sua idade">
<br><br>
<label for=salario> Salario:</label>
<input type=number id=salario name=salario step="0.01" placeholder="Digite seu 
salario">
<br><br>
<label for=data> Salario:</label>
<input type=date id=data name=data placeholder="Digite sua data de nascimento">
<br><br>
<input type=submit value="Salvar Formulário">
</form>
</body>
</html>
insere.php
<?php
$nome = $_POST['nome'];
$idade = $_POST['idade'];
$salario = $_POST['salario'];
$nascimento=$_POST['data'];
$dsn = 'pgsql:dbname=bancodedados;host=127.0.0.1';
$user = 'postgres';
$password = 'senha';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Problemas em conectar: ' . $e->getMessage();
}
$sql = "insert into pessoa(nome, idade, salario, data_nascimento)
values('$nome', $idade, $salario, '$data') ";
$count = $dbh->exec($sql);
echo "<p> $count registro foi incluído</p>";
?>
2.4 Desenvolvimento de um formulário para a consulta de dados em um banco de 
dados.
Caso de uso:
Crie um programa para exibir uma tela de consulta com os campos abaixo:
Dados de entrada:
Nome
Idade
Salário
Data de nascimento
consulta.php
<?php
$dsn = 'pgsql:dbname=bancodedados;host=127.0.0.1';
$user = 'postgres';
$password = 'senha';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Problemas em conectar:' . $e->getMessage();
}
$sql = 'SELECT id, nome, idade, salario, data_nascimento FROM pessoa ORDER BY 
nome';
echo "<table border=1>";
echo " <caption>Consulta aos dados das pessoas cadastradas</caption>";
echo "
<thead>
<tr>
<th>Nome</th>
<th>idade</th>
<th>Salario</th>
<th>Data de nascimento</th>
<th>;&nsp</th>
<th>;&nsp</th>
</tr>
</thead>";
echo " <tbody>";
foreach ($dbh->query($sql) as $row) {
echo "<tr>";
echo "<td>". $row['nome'] . "</td>";
echo "<td>". $row['idade'] . "</td>";
echo "<td>". $row['salario'] . "</td>";
echo "<td>". $row['data_nascimento'] . "</td>";
echo "<td>";
echo "<a href=editar.php?id=".$row['id'].">Editar</a>";
echo "</td>";
echo "<td>";
echo "<a href=excluir.php?id=".$row['id'].">Excluir</a>";
echo "</td>";
echo "</tr>";
}
echo "</tbody>";
echo "</table>"
?>
2.5 Desenvolvimento de um formulário para a edição de dados em um banco de 
dados.
Caso de uso:
Crie um programa para editar o formulário abaixo em um banco de dados:
Dados de entrada:
Nome
Idade
Salário
Data de nascimento
Exemplo:
formulario_edita.php
<?php
$id = $_GET['id'];
$dsn = 'pgsql:dbname=bancodedados;host=127.0.0.1';
$user = 'postgres';
$password = 'senha';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Problemas em conectar:' . $e->getMessage();
}
$sql = "SELECT id, nome, idade, salario, data_nascimento 
FROM pessoa
where id=$id ";
echo "<html>";
echo "<body>";
echo "<form action=edita.php method=post>";
foreach ($dbh->query($sql) as $row) {
echo "<input type=hidden name=id value=$id >";
echo "<label for=nome>Nome:</label>";
echo "<input type=text id=nome name=nome placeholder='Digite seu nome' 
value='"$row['nome']."' >";
echo "<br><br>";
echo "<label for=idade> Idade:</label>";
echo "<input type=number id=idade name=idade placeholder='Digite sua idade' 
value='"$row['idade']."' >";
echo "<br><br>";
echo "<label for=salario> Salario:</label>";
echo "<input type=number id=salario name=salario step='0.01' placeholder='Digite seu 
salario' value='"$row['salario']."' >";
echo "<br><br>";
echo "<label for=data> Salario:</label>";
echo "<input type=date id=data name=data placeholder='Digite sua data de nascimento' 
value='"$row['data_nascimento']."' >";
echo "<br><br>";
echo "<input type=submit value='Salvar Formulário'>";
}
echo "</form>";
echo "</body>";
echo "</html>";
?>
edita.php
<?php
$id=$_POST['id'];
$nome = $_POST['nome'];
$idade = $_POST['idade'];
$salario = $_POST['salario'];
$nascimento=$_POST['data'];
$dsn = 'pgsql:dbname=bancodedados;host=127.0.0.1';
$user = 'postgres';
$password = 'senha';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Problemas em conectar: ' . $e->getMessage();
}
$sql = "update pessoa set nome='$nome', idade=$idade, salario=$salario, 
data_nascimento=$nascimento
where id=$id ";
$count = $dbh->exec($sql);
echo "<p> $count registro foi atualizado</p>";
?>
2.6 Desenvolvimento de um formulário para a exclusão de dados em um banco de 
dados.
Caso de uso:
Crie um programa para incluir o formulário abaixo em um banco de dados:
Dados de entrada:
Nome
Idade
Salário
Data de nascimento
Exemplo:
<?php
$id = $_GET['id'];
$dsn = 'pgsql:dbname=bancodedados;host=127.0.0.1';
$user = 'postgres';
$password = 'senha';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Problemas em conectar:' . $e->getMessage();
}
$sql = "SELECT id, nome, idade, salario, data_nascimento 
FROM pessoa
where id=$id ";
echo "<html>";
echo "<body>";
$sql = "delete from pessoa where id=$id ";
$count = $dbh->exec($sql);
echo "<p> $count registro foi excluído</p>";
?>
2.7 Desenvolvimento de um formulário de login e senha com conexão com o banco.
Caso de uso:
Criar um formulário simples de login e senha com conexão com o banco de dados.
Exemplo:
formulario_login.html
<!doctype html>
<html>
<head>
<meta charset=latin1>
<title> Formulário para inclusão de dados</title>
</head>
<body>
<form action=valida.php method=get>
<label for=login>Login:</label>
<input type=text required id=login name=login placeholder="Digite seu login">
<br><br>
<label for=senha> Senha:</label>
<input type=password required id=senha name=senha placeholder="Digite sua senha">
<br><br>
<input type=submit value="login">
</form>
</body>
</html>
valida.php
<?php
$login=stripslashes($_POST['login']);
$senha = stripslashes($_POST['senha']);
$dsn = 'pgsql:dbname=bancodedados;host=127.0.0.1';
$user = 'postgres';
$password = 'admlinux';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Problemas em conectar: ' . $e->getMessage();
}
$sql = "SELECT login, senha FROM usuario
where login='$login' and senha = '$senha' ";
$resultado = $dbh->query($sql) ;
if ($resultado->rowCount() ) {
echo "Login e senha Ok";
}else {
echo "Login e senha errados";
}
?>
Estratégias de Aprendizagem
Antes da aula:
O aluno deve rever o conteúdo explicado em linguagem de programação relacionada a 
orientação a objetos.
Indicação de Leitura Específica
Manual do PHP PDO
http://php.net/manual/pt_BR/language.oop5.php
Drivers
http://php.net/manual/pt_BR/pdo.drivers.php
Segurança
http://php.net/manual/pt_BR/security.database.sql-injection.php
Aplicação: articulação teoria e prática
Após a aula:
Rever todos os programas criados em sala de aula.
Considerações Adicionais

Continue navegando