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.
2. Quem?
Analista e programador PHP 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 que há de novo no PHP 5?
• Orientação a Objetos
• SQLite
• XML
Adam Trachtenberg
5. 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
8. 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
PHP 4: 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ça aquela 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()
Executa mé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ão de objetos para string
class Person {
...
public function __toString() {
return “$this->name <$this->email>”;
}
}
$objPerson = new Person;
echo $objPerson;
Diego Flores <diegotf@gmail.com>
16. SQLite
Vantagens
• Bilioteca nativa do 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 exigem que 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 ao armazenamento 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 Defined Functions
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);
21. 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.
24. 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 = new DOMDocument;
$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 os elementos 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>Eu sou 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
DOM para 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);
29. XPath
$dom = new DOMDocument;
$dom->load(‘my_file.xml’);
$xpath = new DOMXPath($dom);
$attribute = $xpath->query(‘/my_xml/my_node/my_attribute’);
$simpleXML = simplexml_load_file(‘my_file.xml’);
$node = $simpleXML->xpath (‘/my_xml/my_node’);
foreach($node as $attributes) {
...
}