A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

COM222 DESENVOLVIMENTO DE SISTEMAS WEB

Apresentações semelhantes


Apresentação em tema: "COM222 DESENVOLVIMENTO DE SISTEMAS WEB"— Transcrição da apresentação:

1 COM222 DESENVOLVIMENTO DE SISTEMAS WEB
Aula 11: Classes PHP

2 Conteúdo Noções de orientação a objetos em PHP Classes 2 Definição
Usos Herança Inclusão de objetos

3 Definindo uma classe <?php class Dog { // Declaração de Atributo
public $name; // Declaração de um método public function bark() { // A pseudo variável $this faz referência ao próprio objeto // com ela fazemos acesso aos atributos e métodos internamente echo $this->name.‘ fala: Woof!<br>’; } } // Para criar uma instância $mydog = new Dog(); $mydog->name = ‘Totó’; $mydog->bark();

4 Definindo uma classe <?php
// Podemos instanciar um objeto da seguinte forma $str1 = ‘Dog’; $mydog = new $str1(); // e invocar seus métodos $str2 = ‘bark’; $mydog->$str2(); // Para verificar a classe do objeto var_dump($mydog instanceof Dog) .’<br>’; // Podemos também pegar a classe do objeto // da seguinte forma echo get_class($mydog).’<br>’; // Podemos também clonar uma classe $mydog->name = ‘Totó’; $cloneddog = clone $mydog; $clonedog->bark();

5 Método Construtor e Destrutor
<?php class myDAO{ // Esse método é padrão para instanciar uma classe. // Será executado para cada new que fizermos. function __construct(){ $this->con = new mysqli('localhost','root','senha','db_name'); } // O php implementa o conceito de destrutor para as classes // sempre que o script finalizar (ou uma linha exit()) // os construtores serão executados function __destruct(){ $this->con->close(); echo '<br>Destruindo uma classe';

6 Sobrecarga Obs: unset() é uma função usada para limpar um variável!
Sobrecarga em PHP provê recursos para "criar" dinamicamente propriedades e métodos. Estas entidades dinâmicas são processadas por métodos mágicos fornecendo a uma classe vários tipos de ações. Os métodos de sobrecarga são invocados ao interagir com propriedades ou métodos que não foram declarados ou não são visíveis no escopo corrente. Métodos de sobrecarga de propriedades public void __set(string $name, mixed $value) public mixed __get(string $name) public bool __isset(string $name) public void __unset(string $name) Obs: unset() é uma função usada para limpar um variável!

7 Sobrecarga <?php class Aluno { private $nome = 'semnome';
public $curso = 'SIN'; public function __set($nome, $valor) { echo "Acessando Método __set para o atributo <b>".$nome."</b><br>"; if(property_exists(get_class($this), $nome)) $this->$nome = $valor; } public function __get($nome) echo 'Acessando Método __get para o atributo <b>'.$nome.'</b><br>'; if(property_exists(get_class($this), $nome)) return $this->$nome; return null;

8 Sobrecarga $obj = new Aluno; // Os métodos de sobrecarga serão
<?php class Aluno { private $nome = 'semnome'; public $curso = 'SIN'; public function __set($name, $value) { echo "Acessando Método __set para o atributo <b>".$name."</b><br>"; if(property_exists(get_class($this), $name)) $this->$name = $value; } public function __get($name) echo 'Acessando Método __get para o atributo <b>'.$name.'</b><br>'; if(property_exists(get_class($this), $name)) return $this->$name; return null; $obj = new Aluno; // Os métodos de sobrecarga serão // invocados para acesso de atributos ou // variáveis private $obj->nome = 'Maria'; echo $obj->nome.'<br>'; $obj->curso = 'CCO'; echo $obj->curso;

9 Sobrecarga <?php class Aluno { ... public function __isset($nome) {
echo "O atributo ".$nome." está definido?<br>"; return isset($this->$nome); } public function __unset($nome) { echo "Limpando o atributo ".$nome." <br>"; unset($this->$nome);

10 Sobrecarga $obj = new Aluno; // Quando chamamos isset ou unset para
<?php class Aluno { ... public function __isset($name) { echo "O atributo ".$name." está definido?<br>"; return isset($this->$name); } public function __unset($name) { echo "Limpando o atributo ".$name." <br>"; unset($this->$name); $obj = new Aluno; // Quando chamamos isset ou unset para // um atributo private os métodos __unset // e __isset serão invocados echo var_dump(isset($obj->nome)).'<br>'; unset($obj->nome); Obs: Existem muitos nomes reservados com início de __ , portanto é recomendável não nomear nada de tal forma.

11 Herança Podemos aplicar herança em uma classe da seguinte forma:
class Aluno extends Pessoa { } isso funciona para classes e classes abstratas, para o caso de interfaces usaremos: class DAO implements iDAO {

12 Herança: Classe Abstrata
<?php abstract class Model { // Força a classe que estende Model a definir esses métodos abstract public function save(); abstract public function load(array $atributos); // Método comum public function __construct() { echo 'conectando ao banco de dados usando mysqli!<br>'; echo 'se não for sobrescrito o método será herdado dessa forma<br>'; } Obs: Classes Abstratas NÃO podem ser instanciadas.

13 Herança: Classe Abstrata
class Aluno extends Model { private $nome='pablo'; private $curso='CCO'; public function save() { echo 'salvando o aluno no banco de dados<br>'; } public function load(array $atributos) { echo 'Recuperando o aluno que possui as informações<br>'; foreach ($atributos as $key => $value) { echo $key . '='.$value.'<br>'; // Vamos testar agora nossa classe $obj = new Aluno; $obj->save(); $obj->load(array('nome'=>'joao', 'curso'=>'SIN')); Obs: Ao herdar de uma classe abstrata TODOS métodos abstratos devem ser implementados

14 Herança: Classe Abstrata
class Aluno extends Model { private $nome='pablo'; private $curso='CCO'; public function save() { echo 'salvando o aluno no banco de dados<br>'; } public function load(array $atributos) { echo 'Recuperando o aluno que possui as informações<br>'; foreach ($atributos as $key => $value) { echo $key . '='.$value.'<br>'; // Vamos testar agora nossa classe $obj = new Aluno; $obj->save(); $obj->load(array('nome'=>'joao', 'curso'=>'SIN')); Obs: se sobrescrevemos algum método e quisermos utilizar o antigo(classe pai) podemos fazer o seguinte parent::__construct(); // para o construtor ou qualquer outro método. Obs: Ao herdar de uma classe abstrata TODOS métodos abstratos devem ser implementados

15 Exercício 01 Crie uma classe abstrata (Model.php) que possua os seguintes métodos abstratos: save,delete,update e load Crie uma classe que herda a classe Model chamada de Aluno(Aluno.php). Os atributos são matricula, nome, curso A implementação dos métodos abstratos devem fazer acesso ao mysql (mysqli) Os atributos devem ser private, logo utilize métodos sobrecarregados Crie páginas que deem as opções: Registra Aluno, Consulta Aluno, Deleta Aluno e Atualiza Aluno. Implemente as páginas conforme o próximo slide

16 O SQL do banco esta no próximo slide
Exercício 01 Registra Aluno: O aluno só pode ser cadastrado se TODOS os campos de seus atributos estiverem preenchidos. Consulta Aluno: A consulta deve ser feita pelo número de matrícula e retornar todos seus dados. Se a matrícula não for especificada liste todos. Deleta Aluno: Devemos deletar um aluno a partir de seu número de matrícula. Atualiza Aluno: Podemos alterar qualquer dado do aluno MENOS sua matrícula. O SQL do banco esta no próximo slide

17 Exercício 01 SQL: CREATE DATABASE escola; CREATE TABLE aluno( matricula INT(5) AUTO_INCREMENT, nome VARCHAR(40) UNIQUE, curso char(3) NOT NULL, PRIMARY KEY(matricula)); Obs: Assunto do Aula11 - Ex01 Corpo do ‘matricula’ - ‘nome’ Arquivo deve ser .zip

18 Interface Interface funciona como um contrato:
<?php interface iDAO { // As funções a seguir são utilizadas para construir e executar uma query no mysql public function select(array $attributes = NULL,$tablename); public function insert($tablename,array $attributes); public function update($tablename, array $attributes); public function where($conditions); public function execute(); } Interface funciona como um contrato: - A classe que implementa a interface deve conter todos os métodos especificados na mesma

19 Interface Agora iremos implementar uma classe usando a interface iDAO.
Essa classe será responsável por construir strings de requisição ao banco (Data Access Object). Obs: O objetivo da interface é estipular um padrão para a classe!

20 Interface <?php include_once('iDAO.php');
class DAO implements iDAO { public $query = ''; public function __construct($host,$user,$password,$db){ echo 'Conectando ao MYSQL<br>'; } public function select(array $attributes = NULL,$tablename) { if($attributes == NULL) { $this->query = 'SELECT * FROM '.$tablename; } else { $this->query = 'SELECT '; foreach ($attributes as $attribute) { $this->query.=$attribute.', '; $this->query = rtrim($this->query,', ').' FROM '.$tablename;

21 Interface public function insert($tablename,array $attributes) {
$this->query = 'INSERT INTO '.$tablename.' '; $helper = array('(','('); foreach ($attributes as $key => $value) { $helper[0] .=$key.','; $helper[1] .="'".$value."',"; } $this->query.=rtrim($helper[0],',').') VALUES '.rtrim($helper[1],',').')'; public function update($tablename, array $attributes) { $this->query = 'UPDATE '.$tablename.' SET '; $this->query.=$key."='".$value."', "; $this->query = rtrim($this->query,', ');

22 Interface public function where($conditions) {
$this->query .= ' WHERE '; foreach ($conditions as $value) { $this->query.=$value.' AND '; } $this->query = rtrim($this->query,' AND '); public function execute(){ echo 'A query:<br>'.$this->query.'<br>Foi executada!<br><br>';

23 Interface $dao = new DAO('localhost','root','mysql','escola'); $dao->select(array('nome','curso'),'aluno'); $dao->where(array("nome = 'joao'","curso='CCO'")); $dao->execute(); $dao->select(NULL,'aluno'); $dao->insert('aluno',array('nome'=>'lopes','curso'=>'CCO')); $dao->update('aluno',array('nome'=>'bob')); $dao->where(array("nome = 'joao'")); Agora vamos testar nosso DAO. Veja se os SQL retornados funcionam em seu banco!

24 Interface $dao = new DAO('localhost','root','mysql','escola'); $dao->select(array('nome','curso'),'aluno'); $dao->where(array("nome = 'joao'","curso='CCO'")); $dao->execute(); $dao->select(NULL,'aluno'); $dao->insert('aluno',array('nome'=>'lopes','curso'=>'CCO')); $dao->update('aluno',array('nome'=>'bob')); $dao->where(array("nome = 'joao'")); Agora vamos testar nosso DAO. Veja se os SQL retornados funcionam em seu banco! Obs: rtrim($str,$chars) é uma função que remove caracteres do final de uma string

25 Exercício 02 Exercício 02: Crie uma interface iDAO com os métodos: insert, delete, update, select , where e execute; Crie uma classe DAO que implementa iDAO, a classe DAO deve fazer acesso usando mysqli Ajuste o Exercício 01 para que todas requisições ao banco sejam feitas pela classe DAO. Obs: Assunto do Aula11 - Ex02 Corpo do ‘matricula’ - ‘nome’ Arquivo deve ser .zip


Carregar ppt "COM222 DESENVOLVIMENTO DE SISTEMAS WEB"

Apresentações semelhantes


Anúncios Google