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

Migrando para o PHP 5

  • 1.
    Migrando para oPHP 5 Diego Thomaz Flores
  • 2.
    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
  • 4.
    O que háde novo no PHP 5?
  • 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
  • 7.
  • 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 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>
  • 15.
  • 16.
    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);
  • 20.
  • 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.
  • 22.
    XML Xpath Extensão para pesquisasSQL-like XSLT XML para HTML? Ele é o cara!
  • 23.
    XML Instalando os suportesa XML e XSLT libxml2 >= 2.5.10 libxslt >= 1.0.18
  • 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 = 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);
  • 29.
    XPath $dom = newDOMDocument; $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) { ... }
  • 30.