Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Introdução ao PHP Prof. David Fernandes de Oliveira Instituto de Computação UFAM Arquitetura Cliente/Servidor • Computador Cliente (frontend): – Interface com o usuário – Lê as requisições dos usuários, as submete para o servidor; recebe o conteúdo, e então apresenta este conteúdo para o usuário • Computador Servidor (backend): – Processa as requisições dos usuários Scripts do Lado Servidor e PHP • Scripts do lado servidor – projetados para executar do lado servidor, fornecendo a lógica principal da aplicação • Hypertext Preprocessor (PHP) é uma linguagem do lado servidor que é usada para desenvolver Web sites interativos – Fácil de aprender – Incluí paradigma orientado a objetos – Suporta muitos tipos de bancos de dados (MySQL, Oracle, PostgreSQL) • PHP (continuação): – PHP é uma linguagem open source – Não pode ser acessada ou manipulada através do browser, como JavaScript – Existe e executa apenas no servidor, onde realiza vários tipos de processamentos e acessos a bases de dados Scripts do Lado Servidor e PHP • Regra geral: Usar scripts do lado cliente para lidar com a interface e para pequenos processamentos; usar scripts do lado servidor para grandes processamentos e acesso a dados Como um Web server processa um script PHP Scripts do Lado Servidor e PHP 1 2 3 4 5 6 cadastrarUsuario.php O Apache pede ao módulo PHP para interpretar o arquivo .php O PHP pede ao SGBD para fazer escritas e leituras no Banco de Dados O SGBD informa ao PHP se as requisições foram feitas com sucesso ou não O PHP passa o código HTML resultante para o Servidor Web O Apache envia o código HTML para o Browser, via protocolo HTTP Scripts do Lado Servidor e PHP Quem usa PHP? 7 Popularidade do PHP 8 Popularidade do PHP Popularidade do PHP LAMP X WAMP + + + = LAMP + + + = IDEs Criando Scripts PHP Simples • Linguagem embutida – código que é incorporado dentro de páginas Web • O código PHP é inserido diretamente dentro das páginas HTML, como um bloco separado Criando Scripts PHP Simples • Linguagem embutida – código que é incorporado dentro de páginas Web • O código PHP é inserido diretamente dentro das páginas HTML, como um bloco separado Uma página contendo código PHP precisa ter extensão .php Criando Scripts PHP Simples • Linguagem embutida – código que é incorporado dentro de páginas Web • O código PHP é inserido diretamente dentro das páginas HTML, como um bloco separado Uma página contendo código PHP precisa ter extensão .php O código PHP nunca é enviado para o browser do cliente. Apenas o código HTML resultante é enviado. Blocos de Declaração PHP • Blocos de declaração de código são seções separadas de uma página que são interpretadas pela PHP engine Blocos de Declaração PHP • Blocos de declaração de código são seções separadas de uma página que são interpretadas pela PHP engine Um delimitador é uma sequência especial de caracteres que são usadas para marcar o início e o final de um segmento de código O delimitador padrão da linguagem PHP é <?php e ?> Delimitadores Curtos • Além do delimitador padrão, também é possível usar delimitadores curtos, que no PHP é <? e ?> • No entanto, os delimitadores curtos podem ser desabilitados no arquivo de configuração do PHP – Opção short_open_tag do arquivo php.ini – No Ubuntu, o php.ini é armazenado em /etc/php5/apache2/php.ini Mostrando os Resultados do Script • Para enviar para o browser os resultados do script PHP, é preciso usar o comando echo() ou print() Mostrando os Resultados do Script • Para enviar para o browser os resultados do script PHP, é preciso usar o comando echo() ou print() Os comandos echo() e print()criam novos textos na página HTML que é enviada para o cliente Mostrando os Resultados do Script • É possível ter múltiplos blocos de código PHP Sensitividade de Case no PHP • A maioria das construções PHP são case insensitive Servidor Web Imbutido • A versões PHP 5.4+ já vêm com servidores Web imbutidos Comentários em Código PHP • Comentários em Linhas ignoram textos em uma única linha de código – Adicione // ou # antes do texto • Comentários em Blocos ignoram múltiplas linhas de código – Adicione /* antes da primeira linha – E */ depois da última linha Variáveis e Constantes • Identificadores das variáveis: – Precisam começar com um cifrão ($) – São case sensitive • Use a função define() para criar constantes – define("CONSTANT_NAME", value); – define("MAIORIDADE", 18); Tipos de Dados • Os tipos primitivos da linguagem PHP são: – Números inteiros – Números de ponto-flutuante – Booleanos – Strings – NULL Tipos de Dados Dinâmicos • A tipagem do PHP é dinâmica, isto é, o tipo de uma variável pode mudar ao longo do script Tipos de Dados • A linguagem PHP ainda suporta: – Tipo de dado resource – um tipo de variável especial que referencia um recurso externo, tal como um arquivo XML ou um banco de dados – Tipo de dado array – que contém múltiplos valores de um mesmo tipo – Tipo de dado objeto – que contém tipos de dados complexos Arrays Ordenados • Na linguagem PHP, os arrays ordenados podem ser definidos de diferentes formas: Arrays Associativos • Arrays Associativos são conjuntos de chaves e valores, onde cada valor é acessado através de uma chave associada Arrays Associativos Podemos usar o comando foreach para percorrer os elementos de um array associativo Função count() • Use a função count() para identificar o número de elementos do array Funções print_r e var_dump() • Úteis para imprimir informações sobre os dados de um array Operadores Aritméticos Unários • Os operadores unitários de incremento (++) e decremento (--) podem ser usados como operadores prefixos ou sufixos Operadores de Atribuição Operadores de Comparação Operadores Lógicos • Possuem a mesma estrutura das linguagens C, Java e JavaScript Comandos if..else • Possuem a mesma estrutura das linguagens C, Java e JavaScript Comandos while • Possuem a mesma estrutura das linguagens C, Java e JavaScript Comandos do..while • Possuem a mesma estrutura das linguagens C, Java e JavaScript Comandos for Definindo Funções • Usamos a palavra chave function para definir uma nova função: Escopos de Variáveis • Variáveis globais são declaradas fora das funções e podem ser acessadas por qualquer função através da palavra chave global Escopos de Variáveis • Variáveis globais são declaradas fora das funções e podem ser acessadas por qualquer função através da palavra chave globalAs variáveis globais também podem ser acessadas através do vetor associativo $GLOBALS Por exemplo, $GLOBALS[“instituto”] Variáveis Superglobais • A variável $GLOBALS pertence a um tipo especial de variáveis chamado superglobal • Essas variáveis são criadas automaticamente pelo PHP, e possuem várias informações de ambiente • $_POST – array superglobal que permite a leitura de variáveis passadas através de um formulário HTML usando método POST • $_GET – array superglobal que permite a leitura de variáveis passadas na URL através de um formulário HTML usando método GET Variáveis Superglobais Exercício: criar um script PHP seja capaz de receber os dados do formulário ao lado, e criar uma página para imprimir seus dados. github PHP1 Meu Primeiro Script PHP • É possível importar arquivos de bibliotecas e funções usando os comandos include ou require – include – caso o arquivo não seja encontrado, é retornado apenas um warning – require – caso o arquivo não seja encontrado, é retornado um erro fatal Importação de Arquivos • É possível importar arquivos de bibliotecas e funções usando os comandos include ou require – include – caso o arquivo não seja encontrado, é retornado apenas um warning – require – caso o arquivo não seja encontrado, é retornado um erro fatal Importação de Arquivos • Um sistema de três camadas é um sistema cliente/servidor com três peças distintas: – Camada cliente, ou camada de interface, é o browser Web – Camada de processamento, ou camada intermediária, recebe e processa as requisições dos usuários – Camada de banco de dados, contém os dados necessários para atender as requisições de usuários Arquitetura Cliente/Servidor Arquitetura Cliente/Servidor Arquitetura Cliente/Servidor 1 6 25 3 4MySQL Server Browser Web Server PHP Engine Banco de Dados MySQL • Banco de dados Relacional (baseado em tabelas relacionadas) Um Banco de Dados é composto basicamente por tabelas e relacionamentos. As chaves primárias e estrangeiras são utilizadas de forma a permitir que cada registro possa ser identificado e relacionado com outras informações em outras tabelas. Banco de Dados MySQL • Comandos básicos de SQL: – CREATE • DATABASE • TABLE – USE – SELECT – INSERT INTO – UPDATE – DELETE – SHOW • DATABASES • TABLES • FIELDS FROM Banco de Dados MySQL Comando CREATE DATABASE Utilizado para a criação de um novo banco mysql> CREATE DATABASE ‘AGENDA’; Query OK, 1 row affected (0.03 sec) mysql> mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | agenda | | mysql | +--------------------+ 2 rows in set (0.00 sec) mysql> Comando SHOW DATABASE Utilizado para mostrar as tabelas de um banco de dados mysql> use agenda Database changed mysql> mysql> CREATE TABLE contatos( -> codigo int not null, -> nome varchar(200) not null, -> telefone varchar(20) not null, -> email varchar(150), -> aniversario date not null default ‘0000-00-00’) -> ; Query OK, 0 rows affected (0.25 sec) mysql> Banco de Dados MySQL Comando USE DATABASE Utilizado para acessar um novo banco Comando CREATE TABLE Utilizado para criar uma nova tabela no banco de dados mysql> INSERT INTO contatos VALUES (1,'Maurício', '3124-7200', 'tuska@pucsp.br', '1970-05-24'); Query OK, 1 row affected (0.14 sec) mysql> mysql> SELECT * FROM contatos; +--------+----------+-----------+----------------+-------------+ | codigo | nome | telefone | email | aniversario | +--------+----------+-----------+----------------+-------------+ | 1 | Maurício | 3124-7200 | tuska@pucsp.br | 1970-05-24 | +--------+----------+-----------+----------------+-------------+ 1 row in set (0.28 sec) mysql> Comando INSERT INTO Utilizado para inserir uma nova entrada em uma tabela Comando SELECT Utilizado para fazer uma consulta em um banco de dados Banco de Dados MySQL mysql> UPDATE contatos SET nome='Maurício Nacib Pontuschka' WHERE codigo=1; Query OK, 1 row affected (0.13 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM contatos; +--------+---------------------------+-----------+---------------- +-------------+ | codigo | nome | telefone | email | aniversario | +--------+---------------------------+-----------+---------------- +-------------+ | 1 | Maurício Nacib Pontuschka | 3124-7200 | tuska@pucsp.br | 1970-05- 24 | +--------+---------------------------+-----------+---------------- +-------------+ 1 row in set (0.00 sec) mysql> Comando UPDATE Utilizado para atualizar informações de uma tabela Banco de Dados MySQL mysql> DELETE FROM contatos WHERE codigo=1; Query OK, 1 row affected (0.30 sec) mysql> SELECT * FROM contatos; Empty set (0.00 sec) mysql> Comando DELETE Utilizado para remover entradas de uma tabela Banco de Dados MySQL mysql> SHOW TABLES; +------------------+ | Tables_in_agenda | +------------------+ | contatos | +------------------+ 1 row in set (0.00 sec) mysql> Comando SHOW TABLES Mostra as tabelas de um banco de dados Banco de Dados MySQL mysql> SHOW FIELDS FROM contatos; +-------------+--------------+------+-----+------------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+------------+-------+ | codigo | int(11) | NO | | | | | nome | varchar(200) | NO | | | | | telefone | varchar(20) | NO | | | | | email | varchar(150) | YES | | NULL | | | aniversario | date | NO | | 0000-00-00 | | +-------------+--------------+------+-----+------------+-------+ 5 rows in set (0.33 sec) mysql> exit Bye Comando SHOW FIELDS Mostra os campos de uma tabela Banco de Dados MySQL Exercício • Instalar o PhpMyAdmin no computador • Criar o banco Tetris, que será usado na aplicação do trabalho final da disciplina • Nesse banco, crie uma tabela mensagem com a estrutura da imagem abaixo Banco da Aplicação Tetris • Você também pode usar o MySQL Workbench, para gerar o banco e importá-lo no PhpMyAdmin • PDO – PHP Data Objects – é uma camada de acesso a base de dados que provê uma maneira uniforme de acessar bases de dados diferentes Acesso ao Banco via PDO PDO • Para se conectar ao banco usando PDO, informamos o driver, no caso o mysql, o host, o nome do banco de dados, nome de usuário e senha Acesso ao Banco via PDO • Para se conectar ao banco usando PDO, informamos o driver, no caso o mysql, o host, o nome do banco de dados, nome de usuário e senha Acesso ao Banco via PDO • Algumas razões de problemas para se conectar a um determinado banco de dados: – O servidor do banco de dados não está rodando – Privilégios insuficientes do usuário – Nome de usuário e/ou senha inválido • Para se conectar ao banco usando PDO, informamos o driver, no caso o mysql, o host, o nome do banco de dados, nome de usuário e senha Acesso ao Banco via PDO • Algumas razões de problemas para se conectar a um determinado banco de dados: – O servidor do banco de dados não está rodando – Privilégios insuficientes do usuário – Nome de usuário e/ou senha inválido Para fechar uma conexão PDO aberta, basta abribuir NULL ao resource do banco <?php $conn = NULL; ?> • Comandos SQL podem ser feitos através dos comandos prepare, bindValue e execute Comandos SQL via PDO • Comandos SQL podem ser feitos através dos comandos prepare, bindValue e execute Comandos SQL via PDO PREPARE [BIND]* EXECUTE Comandos SQL via PDO • Uma declaração prepare é uma declaração SQL pré- compilada que pode ser executada múltiplas vezes apenas enviando os dados para o servidor Comandos SQL via PDO • Uma declaração prepare é uma declaração SQL pré- compilada que pode ser executada múltiplas vezes apenas enviando os dados para o servidor • Além de comandos INSERT, pode-se usar todos os comandos SQL, tais como DELETE, UPDATE, SELECT, DROP, etc. Evitando SQL Injections • Inserção de comandos SQL para serem rodados no banco sem o conhecimento de seu administrador Evitando SQL Injections • Inserção de comandos SQL para serem rodados no banco sem o conhecimento de seu administrador Evitando SQL Injections • Inserção de comandos SQL para serem rodados no banco sem o conhecimento de seu administrador SELECT * FROM user WHERE login="andre"; DROP TABLE user ; --" Evitando SQL Injections • Inserção de comandos SQL para serem rodados no banco sem o conhecimento de seu administrador SELECT * FROM user WHERE login="andre"; DROP TABLE user ; --" Usamos o bindValue para atribuir as variáveis ao resto da query. Se alguma irregularidade existir, o MySQL não concluirá a query. $stmt = $conn->prepare('SELECT * FROM user WHERE login=:login'); $stmt->bindValue(":login" , $_POST['login']); $stmt->execute(); Comandos SQL via PDO • Para recuperar registros do banco, usamos o comando prepare e execute seguido de comandos fetch Comandos SQL via PDO • Para obter as linhas como objetos, usamos o método fetch com o parâmetro PDO::FETCH_OBJ Comandos SQL via PDO • O método rowCount mostra a quantidade de registros retornada por um método execute Exercício: criar um script PHP que seja capaz de receber os dados do formulário ao lado, inseri-los em uma tabela em um banco de dados, e depois imprimir esses dados no browser github PHP2 Meu Segundo Script PHP Cookies e sessões • HTTP é um protocolo que não mantém estado, isto é não mantém uma conexão • Cada pedido que um browser faz ao servidor web é independente do pedido anterior • Muitas aplicações necessitam manter o estado ao saltar de uma página para outra – Exemplo: carrinho de compras em sites de comércio eletrônico Aplicações que mantêm estado • As aplicações possuem duas opções para manter informações de estado dos clientes – Podem guardar informações de estado no lado cliente (browser) utilizando cookies – Podem guardar informações de estado no lado servidor web utilizando sessões Cookies • Cookies são variáveis enviadas pelo servidor web para o browser através do protocolo HTTP – Ficam armazenados no lado cliente – São enviados em futuros pedidos do browser para esse servidor web Cookies Limitações dos cookies • Um browser pode guardar até 50 cookies enviados de um determinado domínio • Cookies não podem ter mais do que 4KB • Usuários podem desativar cookies no browser Função setcookie • Os cookies são criados no cliente (browser), a pedido do servidor Web • Para requisitar a criação de um cookie no cliente, usamos uma função PHP chamada setcookie setcookie(name, value, expire, path); setcookie('username', 'hannah', time() + 60 * 60 * 24 * 7, '/'); Acessando um Cookie • Os cookies ficam disponíveis em PHP através do array associativo $_COOKIE • Ler um cookie é um tarefa tão simples quanto acessar o array de sistema $_COOKIE • Note que um cookie só pode ser lido depois que ele foi enviado pelo browser Web if (isset($_COOKIE['username'])) { $username = $_COOKIE['username']; } Acessando um Cookie • No exemplo abaixo, usamos a função setcookie para criar o cookie cookie_teste, caso ele ainda não tenha sido criado Acessando um Cookie • No exemplo abaixo, usamos a função setcookie para criar o cookie cookie_teste, caso ele ainda não tenha sido criado Ao acessar a página pela primeira vez, aparece a mensagem: Você nunca passou por aqui. Acessando um Cookie • No exemplo abaixo, usamos a função setcookie para criar o cookie cookie_teste, caso ele ainda não tenha sido criado Ao acessar a página pela primeira vez, aparece a mensagem: Você nunca passou por aqui. Podemos ver a requisição de criação de um cookie nas ferramendas de desenvolvedores dos browsers Acessando um Cookie • No exemplo abaixo, usamos a função setcookie para criar o cookie cookie_teste, caso ele ainda não tenha sido criado Ao acessar a página pela primeira vez, aparece a mensagem: Você nunca passou por aqui.Ao acessar a página novamente… Apagando um Cookie • Para apagar um cookie, é preciso usar a função setcookie com os mesmos parâmetros, mas com a data no passado • Desta forma, para apagar o cookie gerado pelo comando abaixo • é preciso usar um comando similar ao abaixo: setcookie('username', 'Hannah', time() - 2592000, '/'); setcookie('username', 'Hannah', time() + 60 * 60 * 24 * 7, '/'); Sessões • Através de sessões podemos armazenar informações de estado (variáveis) no servidor • Em vez do browser guardar informações sobre várias variáveis, guarda apenas um session id • Este session id permite acesso às variáveis associadas à sessão Sessões start.php Cookie:P HPSESSID =1234 PHPSESSID=1234 PHPSESSID=1234 Bruna's Session: 1234 Session variables: Start=10:15am Count=12 Current_order=$45.60 Sessões em PHP • A função session_start() cria uma nova sessão ou identifica uma sessão já estabelecida. • Quando um script PHP chama session_start() pela primeira vez, é gerado um session id. • Por padrão, este session id é enviado como cookie para o browser com o nome de PHPSESSID • O session id é uma string aleatória de 32 digitos hexadecimais – Ex: fcc17f071bca934ae2f24f290343c3b7 Sessões em PHP • Depois de usar session_start(), podemos guardar ou acessar variáveis de sessão disponíveis no array associativo – Ex: $_SESSION["start"] = "10:15am"; • Uma vez registadas, as variáveis ficam disponíveis para todos os scripts que chamarem a função session_start() • No exemplo, start é uma variável de sessão armazenada no servidor com o valor 10:15am Sessões em PHP • Variáveis podem ser removidas da sessão atribuindo-lhes o valor FALSE – $_SESSION["start"] = FALSE; • A função session_id() devolve o “session id" da sessão. • session_destroy() elimina todas as variáveis associadas à sessao. Sessões em PHP • O exemplo abaixo demonstra o uso de sessões para guardar variáveis de estado no servidor Web Sessões em PHP • O exemplo abaixo demonstra o uso de sessões para guardar variáveis de estado no servidor Web Podemos ver a requisição de criação do cookie PHPSESSID nas ferramendas de desenvolvedores dos browsers Sessões em PHP • O exemplo abaixo demonstra o uso de sessões para guardar variáveis de estado no servidor Web Ao acessar a página novamente…. Sessões em PHP • O exemplo abaixo demonstra o uso de sessões para guardar variáveis de estado no servidor Web Ao acessar a página mais uma vez, alguns minutos depois…. Armazenando Usernames e Senhas • Obviamente o banco de dados é o meio mais óbvio para armazenar usernames e senhas • No entanto, as senhas devem ser armazenadas de forma criptografada – Para evitar que um hacker que obtenha acesso ao banco tome posse das senhas • Um mecanismo geralmente adotado é o uso de funções de conversão de mão-única Armazenando Usernames e Senhas • Uma função de mão-única amplamente adotada é a MD5 • Você passa uma string para a função e ela te retorna um valor hexadecimal de 32 caracteres: $token = md5('mypassword'); • Neste exemplo, a variável $token recebe da função md5 o valor: 34819d7beeabb9260a5c854bc85b3e44 Armazenando Usernames e Senhas • Uma função ainda mais seguda é a sha1, que retorna um valor hexadecimal de 40 caracteres • Infelizmente, as funções md5 e sha1 não são suficientes para garantir a segurança das senhas – Isso porque são suscetíveis a ataques de força bruta, que usam listas de valores md5 ou sha1 conhecidos Armazenando Usernames e Senhas • Para contornar isso, é possível usar uma técnica conhecida como salting • Salting se refere simplesmente a adição de strings à senha a ser criptografada, antes de usar a função MD5: $senha = 'mypassword' $token = md5('hQb%6'.$senha.'cG*l'); Exercício: criar uma página de login, para que apenas usuários logados tenham permissão de acesso à página ao lado. Para manter a simplicidade, permitir apenas o acesso do usuário com username demo, e senha demo. Meu Terceiro Script PHP github PHP3 Programação Orientada a Objetos O Yii é um framework orientado a objetos, de forma que para aprender sobre esse framework, é necessário conhecer OOP Usar OOP significa organizar sua aplicação como uma coleção de objetos que incorporam estrutura de dados e um conjunto de operações que manipulam estes dados Programação Orientada a Objetos A classe é uma estrutura estática utilizada para descrever objetos ― A classe é um modelo (template) para criação de objetos Um grupo de objetos é descrito por uma classe, e um objeto é uma instância de uma classe Exemplo: ― Classe: Fatura / Objeto: Fatura no. 5470 ― Classe: Pessoa / Objeto: João, Maria, etc... Programação Orientada a Objetos Propriedades são atributos, características de um objeto, que definem a identidade do objeto ― Exemplo: Um ser humano é definido por um conjunto de atributos: físicos (altura, cor da pele, algura, cor do cabelo), psicológicos (personalidade, humor, empatia), de trabalho (capacidade, especialização, criatividade), dentre outros Propriedades Os métodos são operações que definem o comportamento de um objeto Os métodos definem como o objeto irá se relacionar com o mundo externo É por meio de um método, que solicitamos que um objeto faça algo Métodos Definindo uma classe Atributos Método Método Método Instanciando objetos Novo objeto Um construtor é um método especial utilizado para definir o comportamento inicial de um objeto ― O método construtor é executado automaticamente quando criamos um objeto por meio do operador new Um método destrutor ou finalizador é executado quando o objeto é desalocado da memória ― Ou seja, quando atribuímos o valor NULL ao objeto, quando utilizamos a função unset() sobre o mesmo ou, em última instância, quando o programa é finalizado Construtores e Destrutores Construtores e Destrutores Construtor Destrutor Construtores e Destrutores A proteção de acesso ao conteúdo de um objeto se dá por meio de mecanismos de encapsulamento ― O encapsulamento visa separar os aspectos externos de um objeto dos detalhes internos daquele objeto ― É uma forma de proteger os atributos, evitando que estes sejam manipuladas indevidamente Encapsulamento Encapsulamento Encapsulamento Tipos de Visibilidade: PRIVATE: Somente a própria classe PROTECTED: Classe e descendentes PUBLIC: De qualquer ponto Um relacionamento permite que um objeto possua uma referência à outro objeto, podendo visualizar seus atributos ou mesmo acionar uma de suas funcionalidades A forma mais comum de implementar um relacionamento é ter um objeto como atributo de outro Relacionamento Relacionamento Relacionamento Uma herança é um tipo de relacionamento que permite especializar uma classe, criar versões refinadas dela Na herança, as classes são organizadas em hierarquias A herança é uma forma de reutilizar componentes de software aperfeiçoando-os ou adicionando características específicas Herança A herança permite o compartilhamento de atributos e métodos entre as classes de uma hierarquia Cada subclasse herda todas as propriedades (atributos e métodos) de suas ancestrais Uma subclasse pode estender ou redefinir a estrutura e/ou o comportamento de sua super classe ― Leia-se um objeto – é tipo de – outro objeto É um poderoso instrumento de reusabilidade, pois ― Permite que atributos e operações comuns à hierarquia sejam especificados apenas uma vez ― Permite que novas classes sejam criadas contendo apenas a diferença entre ela e a classe-pai Herança Herança Uma classe abstrata não pode ser instanciada diretamente Herança Uma classe final não pode ser extendida Herança Uma classe final não pode ser extendida É possível executar um método da classe extendida através palavra chave parent: <?php class Foo { public function exemplo() {} } class Bar extends Foo { public function exemplo() { parent::exemplo(); } } Chama da classe pai Sistema OO Um sistema OO é modelado, implementado e efetivamente funciona como um conjunto de objetos que interagem entre si. Namespaces Conforme cresce uma aplicação PHP, aumenta o risco de usarmos nomes de funções ou classes já existentes ― Problema aumenta quando usamos componentes de terceiros ― Por exemplo, o que fazer se cada um desses componentes implementarem a classe User ou Database? Até a versão 5.2 do PHP, a única solução era a adoção de longos nomes de funções e classes ― Por exemplo, o Wordpress usava prefixos WP_ para cada função ou classe ― O Zend usava nomes muito descritivos: Zend_Search_Lucene_Analysis_Analyzer_Com mon_Text_CaseInsensitive Namespaces Namespaces O problema de colisões de nomes pode ser resolvido com namespaces Cada namespace fornece um contexto para o nome de uma classe ou função Para criar um namespace, basta inserir uma declaração de namespace na primeira instrução do arquivo PHP Namespaces O problema de colisões de nomes pode ser resolvido com namespaces Cada namespace fornece um contexto para o nome de uma classe ou função Para criar um namespace, basta inserir uma declaração de namespace na primeira instrução do arquivo PHP A partir deste momento, podemos instanciar um novo objeto da classe User de Componente_1 deta forma: $user = new \Componente_1\User(); Namespaces Também é possível criar hierarquias de namespaces, seguindo uma estrutura semelhante às hierarquias de diretórios dos sistemas operacionais Namespaces Namespaces Uma característica importante das namespaces é a possibilidade de importar e atribuir apelidos A palavra-chave use é utilizada para importar classes ou namespaces através de seus nomes Para adicionar apelidos às classes ou namespaces, utilizamos a palavra-chave as Namespaces Chapter 1 Introduction to Web Development PHP Programming with MySQL Client/Server Architecture (continued) Server-Side Scripting and PHP Server-Side Scripting and PHP (continued) Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Creating PHP Code Blocks Slide 17 Short PHP Script Delimiters Displaying Script Results Slide 20 Slide 21 Case Sensitivity in PHP Slide 23 Adding Comments to a PHP Script (continued) Using Variables and Constants Working with Data Types Dynamic Typing Working with Data Types (continued) Slide 29 Slide 30 Slide 31 count() Function print_r(), var_export(), and var_dump() Functions Arithmetic Unary Operators Assignment Operators (continued) Comparison and Conditional Operators (continued) Logical Operators Statements (4) Slide 39 Slide 40 Slide 41 Defining Functions Understanding Variable Scope Slide 44 Using Autoglobals Slide 46 Slide 47 Slide 48 Slide 49 Slide 50 Slide 51 Slide 52 Slide 53 Slide 54 Slide 55 Slide 56 Slide 57 Slide 58 Slide 59 Slide 60 Slide 61 Slide 62 Slide 63 Slide 64 Slide 65 Slide 66 Slide 67 Slide 68 Slide 69 Slide 70 Slide 71 Slide 72 Slide 73 Slide 74 Slide 75 Slide 76 Slide 77 Slide 78 Slide 79 Slide 80 Slide 81 Slide 82 Slide 83 Slide 84 Slide 85 Slide 86 Slide 87 Slide 88 Slide 89 Slide 90 Slide 91 Slide 92 Slide 93 Slide 94 Slide 95 Slide 96 Slide 97 Slide 98 Slide 99 Slide 100 Slide 101 Slide 102 Slide 103 Slide 104 Slide 105 Slide 106 Slide 107 Slide 108 Slide 109 Slide 110 Slide 111 Slide 112 Slide 113 Slide 114 Slide 115 Slide 116 Slide 117 Slide 118 Slide 119 Slide 120 Slide 121 Slide 122 Slide 123 Slide 124 Slide 125 Slide 126 Slide 127 Slide 128 Slide 129 Slide 130 Slide 131 Slide 132 Slide 133 Slide 134 Slide 135
Compartilhar