O documento discute as principais novidades do PHP 5, incluindo: (1) Orientação a objetos com interfaces, herança abstrata e encapsulamento; (2) Banco de dados SQLite para armazenamento em arquivo de texto; (3) Manipulação de XML com DOM, SimpleXML e XPath.
Quem?
Analista e programadorPHP há 8 anos,
já desenvolveu projetos para o
Ministério do Turismo, EMBRATUR,
Fundação Getúlio Vargas, Telefonica e
Agência Click e Folha de São Paulo.
É Gerente de Projetos na 3YZ
Performance Digital, em Porto Alegre,
agência especializada em marketing e
posicionamento online de marcas.
É responsável pela ECRAYON Tecnologia
Criativa, estúdio de desenvolvimento de
sistemas web-based.
3.
Agenda
• O quehá de novo no PHP 5?
• Orientação a Objetos
• SQLite
• XML
Adam Trachtenberg
O que háde novo no PHP 5?
MySQLi
Prepared statements, transactions, subqueries e conexões SSL
SQLite
Executa manipulações SQL em arquivos de texto, sem a necessidade de instalação de um servidor
de banco de dados
XML
DOM, XSLT, SimpleXML e SAX
Iterators e SPL
Navegação simples para objetos, diretórios, DB resources e documentos XML além de filters,
limiters, caching e modificadores especializados
6.
O que háde novo no PHP 5?
Exceptions
Controle de erros em tempo de execução
Streams, Filters e Wrappers
Manipulação de comunicação de dados entre diversos protocolos
SOAP, Tidy e Reflection
Criação de webservices, validação HTML e XHTML e introspecção de código
Orientação a Objetos
Interfaces& Abstracts
Interfaces exigem implementação completa
Abstracts não aceitam private ou final
Type Hinting
public function setAddress(Person $objPerson) {
...
}
9.
Orientação a Objetos
Encapsulamento
PHP4: all public
PHP 5: public, protected & private
__construct() & __destruct()
Controle de instanciamento e deleção de objetos e referências
10.
Orientação a Objetos
__autoload()
Esqueçaaquela lista imensa de includes: ao instanciar uma classe não definida, a função
__autoload() é chamada.
function __autoload($package_name) {
$folders = split(‘_’,$package_name);
$path = join(DIRECTORY_SEPARATOR, $folders) . ‘.php’;
include $path;
}
11.
Orientação a Objetos
clone& __clone()
$obj1 = new MyClass; $obj1 = new MyClass;
$obj1->setName(‘Diego’); $obj1->setName(‘Diego’);
$obj2 = $obj1; $obj2 = clone $obj1;
$obj2->setName(‘Thomaz’); $obj2->setName(‘Thomaz’);
echo $obj1->getName(); echo $obj1->getName();
Thomaz Diego
12.
Orientação a Objetos
__get()& __set()
Manipulação prévia ao definir ou capturar propriedades indefinidas ou propriedades não-
públicas agregadas dentro da classe.
class Person {
private $data;
public function __get($property) {
return (isset($this->data[$property]) ? $this->data[$property] : false);
}
public function __set($property, $value) {
$this->data[$property] = $value;
}
}
13.
Orientação a Objetos
__call()
Executamétodos indefinidos na classe, porém definidos em objetos instanciados por ela através
de agregação. Com isso, heranças múltiplas são resolvidas por simulação.
class Person {
protected $address;
...
public function __call($method, $args) {
if(method_exists($this->address, $method) {
return call_user_func_array(
array($this->address,$method), $args);
}
}
}
14.
Orientação a Objetos
__toString()
Conversãode objetos para string
class Person {
...
public function __toString() {
return “$this->name <$this->email>”;
}
}
$objPerson = new Person;
echo $objPerson;
Diego Flores <diegotf@gmail.com>
SQLite
Vantagens
• Bilioteca nativado PHP 5;
• Lê e escreve em arquivos comuns do storage;
• Além dos usuais INSERT , UPDATE e SELECT permite ainda
transactions, subselect, trigger e UDF;
• Maior rapidez na manipulação de dados, especialmente
durante SELECTs
17.
SQLite
Desvantagens
• UPDATEs exigemque o arquivo seja travado durante sua
execução;
• Não oferece controle de permissões GRANT & REVOKE;
• Não é indicado para sistemas com grande tráfego de dados.
18.
SQLite
In-Memory Tables
Suporte aoarmazenamento de tabelas na memória RAM: maior rapidez, sem persistência.
Transactions
Garantia de consistência na execução de queries múltiplas.
$sql = ‘BEGIN;’;
foreach($person as $user) {
$sql .= “INSERT INTO users VALUES(‘${user[0]}’,’${user[1]}’);”;
}
$sql .= ‘COMMIT;’; // Use COMMIT para executar os comandos e ROLLBACK para cancelá-los
sqlite_query($sql);
19.
SQLite
UDF: User DefinedFunctions
Suporte a funções personalizadas para a manipulação de dados.
SELECT & INSERT
One-to-one: para um dado valor, um único retorno.
GROUP BY & ORDER BY
Many-to-one: para um conjunto de valores, um retorno consolidado.
sqlite_create_function($db, ‘db_func_name’, ‘php_func_name’, 1);
XML
DOM
Com ele, tudoé possível!
SAX
Implementação original do PHP, funciona como streamer. Usa menos memória que o DOM, mas
exige códigos mais complexos.
SimpleXML
O paraíso do RSS, REST e dados de configuração.
DOM
• É aúnica forma de ler XML em árvore de elementos;
• No PHP 4, o DOM era experimental; dessa forma, exige
reescrita dos códigos em PHP 5;
• Organiza o XML em DOMElements, chamados nodes;
• Nodes são como objetos de um XML; o conteúdo de texto de
cada node é apenas uma de suas propriedades.
25.
DOM
$dom = newDOMDocument;
$dom->loadXML(‘<xml>Eu sou um XML</xml>’); // Carrega o XML de uma string dada
$dom->load(‘my_file.xml’); // Carrega o XML de um arquivo externo
$root = $dom->documentElement;
foreach($root->childNodes as $myNode) {
$this->doSomething( $myNode->nodeValue );
}
$dom->save(‘my_new_file.xml’); // Salva o XML em um arquivo externo
echo $dom->saveXML(); // Retorna o XML como string
26.
SimpleXML
• Transforma oselementos de um XML em propriedades de
objetos;
• Atribui o conteúdo textual de cada elemento como valor da
propriedade;
• Elementos com nomes iguais são agrupados em listas;
• Atributos de um elemento são armazenados em array.
27.
SimpleXML
$xml = simplexml_load_string(‘<xml>Eusou um XML</xml>’);
$xml = simplexml_load_file(‘my_file.xml’);
...
echo $xml->asXML(); // Transforma o objeto SimpleXML em string XML
$xml->asXML(‘my_new_file.xml’); // Salva o objeto SimpleXML em um arquivo XML externo
ou
echo $xml->my_node->my_child_node->asXML();
28.
SimpleXML + DOM
DOMpara SimpleXML
$dom = new DOMDocument;
$dom->load(‘my_file.xml’);
$simpleXML = simplexml_import_dom($dom);
SimpleXML para DOM
$simpleXML = simplexml_load_file(‘my_file.xml’);
$dom = dom_import_simplexml($simpleXML);