migrando para o php 5
DESCRIPTION
Além do suporte à orientação a objetos o PHP 5 conta com uma série de funcionalidades e bibliotecas nativas que facilitam e otimizam o desenvolvimento de aplicações de médio e grande porte. Porém, às vesperas do lançamento da versão 5.3 do PHP, muitos profissionais ainda desconhecem as grandes vantagens dos releases 5.x da linguagem e, muitas vezes, mantém seus códigos estruturados para a versão 4.x.TRANSCRIPT
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 É 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
• XMLAdam Trachtenberg
O que há de novo no PHP 5?
O que há de novo no PHP 5?
MySQLiPrepared statements, transactions, subqueries e conexões SSL
SQLiteExecuta manipulações SQL em arquivos de texto, sem a necessidade de instalação de um servidor Executa manipulações SQL em arquivos de texto, sem a necessidade de instalação de um servidor de banco de dados
XMLDOM, XSLT, SimpleXML e SAX
Iterators e SPLNavegaçã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?
ExceptionsControle de erros em tempo de execução
Streams, Filters e WrappersManipulação de comunicação de dados entre diversos protocolosManipulação de comunicação de dados entre diversos protocolos
SOAP, Tidy e ReflectionCriaçã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) {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->setName(‘Diego’);
$obj1 = new MyClass;
$obj1->setName(‘Diego’);
$obj2 = $obj1;
$obj2->setName(‘Thomaz’);
echo $obj1->getName();
Thomaz
$obj2 = clone $obj1;
$obj2->setName(‘Thomaz’);
echo $obj1->getName();
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;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 <[email protected]>
SQLite
SQLite
Vantagens
• Bilioteca nativa do PHP 5;
• Lê e escreve em arquivos comuns do storage;• 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 TablesSuporte ao armazenamento de tabelas na memória RAM: maior rapidez, sem persistência.
TransactionsGarantia de consistência na execução de queries múltiplas.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 FunctionsSuporte a funções personalizadas para a manipulação de dados.
SELECT & INSERT
One-to-one: para um dado valor, um único retorno.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
DOMCom ele, tudo é possível!
SAXImplementação original do PHP, funciona como streamer. Usa menos memória que o DOM, mas Implementação original do PHP, funciona como streamer. Usa menos memória que o DOM, mas exige códigos mais complexos.
SimpleXMLO paraíso do RSS, REST e dados de configuração.
XML
XpathExtensão para pesquisas SQL-like
XSLTXML para HTML? Ele é o cara!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;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’);$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!Obrigado!