Ir para o conteúdo principal
Migrando para o PHP 5




      Diego Thomaz Flores
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.
Agenda
• O que há de novo no PHP 5?

• Orientação a Objetos

• SQLite

• XML
                               Adam Trachtenberg
O que há de novo no PHP 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
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
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) {
    ...
}
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
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;
}
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
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;
    }
}
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);
         }
     }
}
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>
SQLite
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
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.
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);
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);
XML
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.
XML
Xpath
Extensão para pesquisas SQL-like



XSLT
XML para HTML? Ele é o cara!
XML
Instalando os suportes a XML e XSLT

libxml2 >= 2.5.10
libxslt >= 1.0.18
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.
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
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.
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();
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);
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) {
    ...
}
Obrigado!
diegotf@gmail.com