Recursos avançados e Orientação a Objetos no PHP Edgar Rodrigues Sandi edgar@season.com.br
Gerente de projetos Desenvolvedor PHP e Java Ministra os treinamentos: Linguagens de Programação PHP I Fundamentos ( Oficial Zend ) PHP II Estruturas Superiores ( Oficial Zend ) Academia do Programador ( Oficial Globalcode ) Bancos de Dados (MySQL / PostgreSQL e Oracle) MS Project WebDesign (Suíte Adobe) Instrutor homologado Globalcode
Quem é a Season Treinamentos? A Season Treinamentos é o único centro autorizado a realizar treinamentos oficiais das tecnologias Zend no Brasil. Outras parcerias de treinamentos oficial:
Treinamentos oficiais: PHP I Fundamentos PHP II Estruturas Superiores Próximos treinamentos oficiais: Zend Framework Zend Server Zend Studio Preparatório para as certificações ZCE e ZFC
Treinamentos oficiais em São Paulo: PHP I - Fundamentos Treinamento Oficial Zend Carga Horária 24 horas Próximas Turmas São Paulo/SP 28.02.2011 Seg. à Ter. - Integral PHP II Estruturas Superiores Treinamento Oficial Zend Carga Horária 40 horas Próximas Turmas São Paulo/SP 28.03.2011 Seg. à Sex. - Integral
Próximos minicursos em São Paulo: Segurança no PHP 30.03.2011 Quarta feira 19h Frameworks PHP 27.04.2011 Quarta feira 19h Carga Horária dos minicursos 3 horas A certificação ZCE 25.05.2011 Quarta feira 19h
Quem é Zend Technologies? Zend é uma empresa norte-americana fabricante de software. Seus produtos são orientados para a plataforma PHP com ênfase no gerenciamento e melhoria do desempenho de aplicações web utilizando esta tecnologia.
Diário de bordo Recursos avançados no PHP Exemplos de código Orientação a objetos Exemplos de código PDO Exemplos de código
Uma opção a se utilizar para o IF é conhecida como if inline ou if ternário. Utilizado como substituto do IF comum (IF e ELSE). Em sua sintaxe encontramos os caracteres? e o : echo ($var > 10)? "SIM" : "NÃO"; ou $foo = ($var > 10)? "SIM" : "NÃO";
O comando foreach nos oferece uma maneira mais fácil de navegar por um array. O PHP oferece duas opções de sintaxe: 1. navegando por um array numérico foreach ( $array as $value ) { echo $value; } 2. navegando por um array associativo foreach ( $array as $key => $value ) { echo $key, $value; }
ctype_alnum Faz a validação de caracteres alfanuméricos $valor = "aa12bb6cc"; if(ctype_alnum($valor)){ echo 'passou no teste'; <= } else { echo 'não passou no teste'; }
ctype_alpha Faz a validação de caracteres alfabeticos $valor = "aa12bb6cc"; if(ctype_alpha($valor)){ echo 'passou no teste'; } else { } echo 'não passou no teste'; <=
ctype_digit Faz a validação de caracteres numéricos $valor = "aa12bb6cc"; if(ctype_digit($valor)){ echo 'passou no teste'; } else { } echo 'não passou no teste'; <=
ctype_* Outras validações ctype_cntrl = valida caracteres de controle ctype_graph = valida se há algum caractere imprimível exceto espaço ctype_lower = valida caracteres minúsculo ctype_upper = valida caracteres maiúsculo
O PHP oferece amplo suporte a tratamento de erros. Um deles é o tratamento de Exceções utilizando o try catch. try { <codigo> } catch (Exception $e) { <tratamento> }
No tratamento dos erros o PHP oferece algumas opções para auxiliar o desenvolvedor. Opções de <tratamento> $e->getcode(); $e->getfile(); $e->getline(); $e->getmessage(); $e->getprevious(); $e->gettrace(); $e->gettraceasstring();
Diário de bordo Recursos avançados no PHP Exemplos de código Orientação a objetos Exemplos de código PDO Exemplos de código
Classe - tipo de dado definido com atributos e métodos Objeto - uma instância de uma classe Atributo - dados de uma classe Método - funções de uma classe Herança - extensão de uma classe
Diário de bordo Recursos avançados no PHP Exemplos de código Orientação a objetos Exemplos de código PDO Exemplos de código
Persistência utilizando o PDO
PDO é uma extensão do PHP utilizada para a abstração do acesso ao SGBD.
Abstração do acesso a diversos bancos de dados; Segurança Orientado a objetos Expansível
Ativando a extensão para o SGBD: Isso é feito no arquivo php.ini, extension=php_pdo_mysql.dll extension=php_pdo_pgsql.dll extension=php_pdo_odbc.dll extension=php_pdo_oci.dll
Descobrindo quais drivers estão disponíveis no seu PHP: foreach(pdo::getavailabledrivers() as $driver){ echo $driver.'<br />'; }
MySQL PostgreSQL Microsoft SQL Server/Sybase IBM DB2 Oracle Informix Firebird ODBC SQLite
PDO Representa a conexão PDOStatement Representa um comando preparado e um result set associado PDOException Lança uma exceção do banco de dados
As consultas são compiladas uma vez no nível do servidor e em seguida os parâmetros são passados Benefícios do uso de Prepared Statements: Maior desempenho Maior segurança Mais portátil
As declarações preparadas são tratadas em uma ordem específica: 1. Compila (prepare) a declaração Única etapa onde é necessário adicionar os passos para acessar um banco de dados 2. Executa a consulta com ou sem parâmetros 3. Recupera os resultados Os resultados são recuperados de um objeto
Buscando um usuário pelo ID 1. Abrir uma conexão $conn = new PDO ("mysql:host=$host;dbname=$db",$user,$pass); 2. Compilar (preparar) a declaração $stmt = $conn->prepare("select * FROM users WHERE id = :id"); 3. Preenchendo os parâmetros opcionais $stmt->bindvalue(':id', $id); 4. Executar a consulta $stmt->execute(); // Retorna verdadeiro ou falso 5. Recuperar os resultados $result = $stmt->fetch(pdo::fetch_assoc);
fetch () pode ter várias opções ($pdo->fetch (PDO::FETCH_LAZY)) PDO::FETCH_ASSOC: Retorna um array associativo PDO::FETCH_BOTH: Retorna um array associativo e numérico PDO::FETCH_BOUND: Retorna true e vincula os valores em seu bindcolumn () da declaração para os valores de retorno PDO::FETCH_CLASS: Retorna uma nova instância da classe especificada com propriedades populadas que mapeiam o result set
PDO::FETCH_INTO: o Retorna como objeto e preenche as propriedades com valores mapeados a partir dos nomes das colunas PDO::FETCH_LAZY: o Combina FETCH_BOTH e FETCH_OBJ PDO::FETCH_NUM: o Retorna um array numérico PDO::FETCH_OBJ: o Retorna um objeto anônimo (stdclass) com nomes de propriedades correspondentes aos nomes das coluna
O PDO tem suporte a transações $conn->begintransaction(); $conn->commit(); $conn->rollback(); $conn = null;
Uma forma rápida de se recuperar os dados de uma consulta: foreach($conn->query("select * FROM users") as $row){ // código }
Retornando uma lista de usuários: try { $conn = new PDO("mysql:host=$host;dbname=$db", $user,$pass); $result = $conn->query('select * FROM users'); } catch (PDOException $e) { echo $e->getmessage(); return false; } return $result;
Adicionando um usuário utilizando transação try { $conn = new PDO("mysql:host=$host;dbname=$db",$user,$pass); $conn->begintransaction(); $stmt = $conn->prepare('insert INTO users(nome, email, telefone) values (:nome, :email, :telefone)'); $stmt->bindvalue(':nome', $user["nome"]);... $stmt->execute(); $conn->commit(); } catch (PDOException $e) { } $conn->rollback(); echo $e->getmessage(); return false; return true;
Código poderoso. Classes Model e Classes Controller. Diminuir quantidade de código PHP misturado entre tags HTML. Implementação e uso de Design Patterns.
A classe Connection herda a classe PDO class Connection extends PDO { private static $connection; public function Connection($dsn, $user="", $pass="") { parent:: construct($dsn, $username, $password); } (continua)
public static function getconnection(){ // Design Pattern Singleton if(!isset(self::$connection)) { try { self::$connection = new Connection('mysql:host=127.0.0.1; dbname=season','teste','123'); } catch (PDOException $e) { echo $e->getmessage(); } } return self::$connection; }
class User { private $id; private $nome; private $email; private $telefone; //... getters and setters public function listusers(){... } public function adduser($user){... } public function edituser($user){... } public function removeuser($user){... } public function getuserbyid($id){... }
require_once 'User.php'; if($_server['request_method'] == 'POST') { $actionuser = new User(); if ($_REQUEST['action'] == 'add') { if($actionuser->adduser($_request)) { echo "<script> alert('usuario inserido com sucesso!'); </script>"; echo "<meta http-equiv='refresh' content='0; url=../templates/listusers.php'>"; } else { echo "<script> alert('ocorreu uma falha, tente novamente!'); </script>"; echo "<meta http-equiv='refresh' content='0; url=../templates/formadduser.php'>"; } (... )
Esta apresentação será disponibilizada por link através do perfil
Obrigado! How to Follow: @GrupoSeason,, @Zend, @phpbrasil, @phpsp, @Globalcode Contato pessoal: edgar.cbbrasil@gmail.com