SPL

39
23:49 SPL SPL Standard PHP Library Standard PHP Library

description

Standard PHP Library

Transcript of SPL

23:49

SPLSPLStandard PHP LibraryStandard PHP Library

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ConteúdoConteúdo

● ApresentaçãoApresentação● PHP 5PHP 5● SPLSPL● FunçõesFunções● ClassesClasses● InterfacesInterfaces● AplicaçõesAplicações● ConclusãoConclusão

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ApresentaçãoApresentação

● Anderson “Duodraco” CasimiroAnderson “Duodraco” Casimiro● Zend Certified Engineer – PHP5Zend Certified Engineer – PHP5● Atuante há mais de 6 anos com PHPAtuante há mais de 6 anos com PHP

– ColdFusion, Mysql, Oracle, SqlServer, DB2ColdFusion, Mysql, Oracle, SqlServer, DB2

● Desenvolvimento, engenharia, coordenaçãoDesenvolvimento, engenharia, coordenação– Saúde, RH, Varejo, Transito e PublicidadeSaúde, RH, Varejo, Transito e Publicidade

● Atuando na Gráficos BurtiAtuando na Gráficos Burti● PHP-SP, OphpenPHP-SP, Ophpen

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

PHP 5PHP 5

● Implementou novo modelo OOImplementou novo modelo OO– InterfacesInterfaces

– Métodos mágicosMétodos mágicos● __ → get, set, isset,destruct, call, toString, ...__ → get, set, isset,destruct, call, toString, ...

– Visibilidade → public, private, protectedVisibilidade → public, private, protected

– Final, abstract, static, ...Final, abstract, static, ...

● Novas funcionalidades OONovas funcionalidades OO– SimpleXML, PDO, SOAP, SCA ...SimpleXML, PDO, SOAP, SCA ...

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

PHP 5PHP 5

● SimpleXMLSimpleXML– Interface OO para obter informações de XMLInterface OO para obter informações de XML

– Suporta XpathSuporta Xpath

– Importa objetos DomDocumentImporta objetos DomDocument

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

PHP 5PHP 5

● PDOPDO– PHP Data ObjectsPHP Data Objects

– Interface unificada para manipulação de BDInterface unificada para manipulação de BD

– Orientado a ObjetosOrientado a Objetos

– ExceptionsExceptions

– Menor carga do servidorMenor carga do servidor

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

SPLSPL

● SPLSPL– Standard PHP LibraryStandard PHP Library

– Objetivo: Solucionar problemasObjetivo: Solucionar problemas

– Funções, Classes e InterfacesFunções, Classes e Interfaces

– Complementam o modelo OO do PHP5Complementam o modelo OO do PHP5

– Já implementado em alguns recursosJá implementado em alguns recursos● SimpleXML, PDO, ...SimpleXML, PDO, ...

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

SPLSPL

● RequisitosRequisitos– Compilado por default desde PHP 5.0.0Compilado por default desde PHP 5.0.0

– A partir de 5.3, não pode ser desabilitadaA partir de 5.3, não pode ser desabilitada

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

FunçõesFunções

– spl_autoloadspl_autoload

– spl_autoload_callspl_autoload_call

– spl_autoload_extensionsspl_autoload_extensions

– spl_autoload_functionsspl_autoload_functions

– spl_autoload_registerspl_autoload_register

– spl_autoload_unregisterspl_autoload_unregister

– class_implementsclass_implements

– class_parentsclass_parents

– iterator_countiterator_count

– iterator_to_arrayiterator_to_array

– spl_classesspl_classes

– spl_object_hashspl_object_hash

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

FunçõesFunções

● spl_autoload*spl_autoload*– PHP 5 >= 5.1.2PHP 5 >= 5.1.2

– Incrementa a funcionalidade da __autoloadIncrementa a funcionalidade da __autoload

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

FunçõesFunções

● spl_autoload_registerspl_autoload_register– Registra uma função para ser usada como Registra uma função para ser usada como

__autoload__autoload

– Se chamada sem parâmetros, chama Se chamada sem parâmetros, chama spl_autoload, buscando arquivos no include_path spl_autoload, buscando arquivos no include_path como “{$classe}.php” ou “{$classe}.inc”como “{$classe}.php” ou “{$classe}.inc”

– Pode usar métodos estáticosPode usar métodos estáticos

● spl_autoload_unregisterspl_autoload_unregister– Retira uma função da lista de implementações de Retira uma função da lista de implementações de

__autoload__autoload

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

FunçõesFunções

function ModelLoader($className){function ModelLoader($className){

require_once 'Model/'.$className.'.class.php';require_once 'Model/'.$className.'.class.php';

}}

class Helper{class Helper{

static function loader($c){static function loader($c){

require 'helpers/'.$c.'.inc';require 'helpers/'.$c.'.inc';

}}

}}

spl_autoload_register('ModelLoader');spl_autoload_register('ModelLoader');

spl_autoload_register('Helper::loader');spl_autoload_register('Helper::loader');

$controller = new Controller;$controller = new Controller;

HTML::form($url);HTML::form($url);

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

FunçõesFunções

● spl_autoload_callspl_autoload_call– Força a execução de spl_autoloadForça a execução de spl_autoload

● spl_autoload_extensionsspl_autoload_extensions– Modifica e retorna as extensões padrão que Modifica e retorna as extensões padrão que

spl_autoload busca (default: .php e .inc)spl_autoload busca (default: .php e .inc)

● spl_autoload_functionsspl_autoload_functions– Retorna um array com as funções registradasRetorna um array com as funções registradas

● spl_autoloadspl_autoload– Chamada se houver algum spl_autoload_registerChamada se houver algum spl_autoload_register

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

FunçõesFunções

● class_implementsclass_implements– Retorna as interfaces de uma dada classeRetorna as interfaces de uma dada classe

● class_parentsclass_parents– Retorna as classes parent de uma dada classeRetorna as classes parent de uma dada classe

● spl_object_hash (PHP5 >= 5.2)spl_object_hash (PHP5 >= 5.2)– Retorna um id único para um objetoRetorna um id único para um objeto

● spl_classesspl_classes– Retorna as classes definidas na SPLRetorna as classes definidas na SPL

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

AdendoAdendo

● IteratorIterator– ““Um iterator, em programação de computadores, Um iterator, em programação de computadores,

permite a "iteração" e um modo de acesso a permite a "iteração" e um modo de acesso a elementos de um agregado de objetos, elementos de um agregado de objetos, sequencialmente, sem exposição de estruturas sequencialmente, sem exposição de estruturas internas.”internas.”

– ““Um exemplo: Considere uma lista simplesmente Um exemplo: Considere uma lista simplesmente encadeada. Um iterador deve permitir o acesso a encadeada. Um iterador deve permitir o acesso a todos os elementos da lista de uma forma segura todos os elementos da lista de uma forma segura sem que ocorra perda de informação ou sem que ocorra perda de informação ou modificações não permitidas.”modificações não permitidas.”

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

FunçõesFunções

● iterator_countiterator_count– Retorna o número de elementos de uma Retorna o número de elementos de uma

implementação de Iteratorimplementação de Iterator

– Ex.: número de elementos em uma query PDOEx.: número de elementos em uma query PDO

● iterator_to_arrayiterator_to_array– Retorna um array simples, a partir de uma Retorna um array simples, a partir de uma

implementação de iteratorimplementação de iterator

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● ClassesClasses– CachingIteratorCachingIterator

– RecursiveCachingIteratorRecursiveCachingIterator

– DirectoryIteratorDirectoryIterator

– RecursiveDirectoryIteratorRecursiveDirectoryIterator

– RecursiveIteratorIteratorRecursiveIteratorIterator

– FilterIteratorFilterIterator

– LimitIteratorLimitIterator

– ParentIteratorParentIterator

– SimpleXMLIteratorSimpleXMLIterator

– ArrayIteratorArrayIterator

– ArrayObjectArrayObject

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● CachingIterator, Recursive CachingIteratorCachingIterator, Recursive CachingIterator– Wrapper de IteratorWrapper de Iterator

– Provê iteração em cache sobre outro IteratorProvê iteração em cache sobre outro Iterator

– Por default retorna __toString de cada elementoPor default retorna __toString de cada elemento

CachingIterator::__construct(CachingIterator::__construct(

Iterator $it,Iterator $it,

$flags = self::CALL_TOSTRING$flags = self::CALL_TOSTRING

) )

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● DirectoryIteratorDirectoryIterator– Iterador de DiretórioIterador de Diretório

– Métodos de InformaçãoMétodos de Informação

– Cada elemento é instância de SplFileInfoCada elemento é instância de SplFileInfo

foreach(new DirectoryIterator('/tmp') as $each){foreach(new DirectoryIterator('/tmp') as $each){

if(!$each->isDot()) {print_r($each);}if(!$each->isDot()) {print_r($each);}

}}

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● DirectoryIteratorDirectoryIterator– int getATime()int getATime()

– int getCTime()int getCTime()

– string getFilename()string getFilename()

– int getGroup()int getGroup()

– int getInode()int getInode()

– int getMTime()int getMTime()

– int getOwner()int getOwner()

– string getPath()string getPath()

– string getPathname()string getPathname()

– int getPerms()int getPerms()

– int getSize()int getSize()

– string getType()string getType()

– bool isDir()bool isDir()

– bool isDot()bool isDot()

– bool isExecutable()bool isExecutable()

– bool isFile()bool isFile()

– bool isLink()bool isLink()

– bool isReadable()bool isReadable()

– bool isWritable()bool isWritable()

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● RecursiveDirectoryIteratorRecursiveDirectoryIterator– Versão recursiva de DirectoryIteratorVersão recursiva de DirectoryIterator

– Cada elemento é instância de Cada elemento é instância de RecursiveDirectoryIteratorRecursiveDirectoryIterator

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● RecursiveIteratorIteratorRecursiveIteratorIterator– Itera sobre Iteradores RecursivosItera sobre Iteradores Recursivos

foreach(foreach(

new RecursiveIteratorIterator($iterator) as $inew RecursiveIteratorIterator($iterator) as $i

){){

print_r($i);print_r($i);

}}

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● FilterIterator (abstract)FilterIterator (abstract)– Iterator que retorna somente elementos aceitosIterator que retorna somente elementos aceitos

– Necessária implementação do método accept()Necessária implementação do método accept()● Sobre $this->it->current();Sobre $this->it->current();

– A iteração percorre Elementos que fizerem A iteração percorre Elementos que fizerem accept() retornar trueaccept() retornar true

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● LimitIteratorLimitIterator– Implementação de Iterator que opera sobre um Implementação de Iterator que opera sobre um

determinado rangedeterminado range

$li = new LimitIterator($iterator,$offset,$count);$li = new LimitIterator($iterator,$offset,$count);

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● ParentIterator (PHP5 > 5.1)ParentIterator (PHP5 > 5.1)– Implementação de Iterator que opera somente Implementação de Iterator que opera somente

sobre elementos que possuem elementos filhossobre elementos que possuem elementos filhos

class ParentIterator extends FilterIterator{class ParentIterator extends FilterIterator{

......

function accept(){function accept(){

return $this->it->hasChildren();return $this->it->hasChildren();

}}

} }

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● SimpleXMLIteratorSimpleXMLIterator– Iterator que opera sobre um XMLIterator que opera sobre um XML

– Elementos operam como SimpleXMLElementElementos operam como SimpleXMLElement

– RecursivoRecursivo

$xml = file_get_contents("contatos.xml");$xml = file_get_contents("contatos.xml");

foreach (new SimpleXMLIterator($dados) as $contato){foreach (new SimpleXMLIterator($dados) as $contato){

echo($contato->nome . "<br />");echo($contato->nome . "<br />");

}}

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● ArrayIteratorArrayIterator– Classe para operar sobre ArraysClasse para operar sobre Arrays

● Iteração, busca, ordenação, adição e exclusão de Iteração, busca, ordenação, adição e exclusão de elementos.elementos.

$ai = new ArrayIterator($array,$ai = new ArrayIterator($array,

ArrayIterator::ARRAY_AS_PROPS || ArrayIterator::ARRAY_AS_PROPS ||

ArrayIterator::STD_PROP_LISTArrayIterator::STD_PROP_LIST

););

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● ArrayIteratorArrayIterator– append ($value)append ($value)

– asort ()asort ()

– count ()count ()

– getArrayCopy ()getArrayCopy ()

– getFlags ()getFlags ()

– ksort ()ksort ()

– uasort (function)uasort (function)

– uksort (function)uksort (function)

– natcasesort ()natcasesort ()

– natsort ()natsort ()

– next ()next ()

– offsetExists ($index)offsetExists ($index)

– offsetGet ($index)offsetGet ($index)

– offsetSet ($i,$val)offsetSet ($i,$val)

– offsetUnset ($index)offsetUnset ($index)

– rewind ()rewind ()

– setFlags ($flags)setFlags ($flags)

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ClassesClasses

● ArrayObjectArrayObject– Wrapper de arraysWrapper de arrays

– Possibilita a iteração recursivaPossibilita a iteração recursiva

– Possibilita iterar sobre propriedades de objetosPossibilita iterar sobre propriedades de objetos

– Além dos métodos de ArrayIterator implementa Além dos métodos de ArrayIterator implementa getIterator()getIterator()

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

InterfacesInterfaces

● InterfacesInterfaces– IteratorIterator

– RecursiveIteratorRecursiveIterator

– OuterIteratorOuterIterator

– SeekableIteratorSeekableIterator

– CountableCountable

– TransversableTransversable

– SplObjectSplObject

– SplObserver *SplObserver *

* Ainda não documentado* Ainda não documentado

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

AplicaçõesAplicações

● PDO – PHP Data ObjectPDO – PHP Data Object– PDOStatement, resultado de PDO::query e PDOStatement, resultado de PDO::query e

PDO::prepare é iterávelPDO::prepare é iterável

– Consome menos recursosConsome menos recursos

– Geralmente mais rápido que as funções nativasGeralmente mais rápido que as funções nativas● ~90% mais eficaz~90% mais eficaz

– Itera sobre o 'resultset' sem bufferItera sobre o 'resultset' sem buffer● A cada iteração obtem um novo registroA cada iteração obtem um novo registro

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

AplicaçõesAplicações

Iteração

Iteração (PDO, SPL Iterator)

Iteração

RAM

Demanda memória

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

AplicaçõesAplicações

● Estruturas com listas melhor administráveisEstruturas com listas melhor administráveis● Melhor interface de iteração em diretóriosMelhor interface de iteração em diretórios● spl_autoload facilita muito a vida na busca de spl_autoload facilita muito a vida na busca de

arquivos para uso de classesarquivos para uso de classes● Exceptions EspecíficasExceptions Específicas

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ConclusãoConclusão

● A SPL, por manter seu conjunto de interfaces A SPL, por manter seu conjunto de interfaces bem definidas, torna mais fácil o trabalho de bem definidas, torna mais fácil o trabalho de manipular diferentes estruturas de dados e manipular diferentes estruturas de dados e implementar Design Patternsimplementar Design Patterns

● Com as funções de autoload o trabalho de Com as funções de autoload o trabalho de resolver diretórios fica bem simples e resolver diretórios fica bem simples e organizadoorganizado

● Com os problemas se resumindo, passamos Com os problemas se resumindo, passamos menos tempo digitando a solução.menos tempo digitando a solução.

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ConclusãoConclusão

● Em casos como a PDO, além dos ganhos Em casos como a PDO, além dos ganhos com desenvolvimento, há também o ganho com desenvolvimento, há também o ganho com performance, não tão visível em com performance, não tão visível em benchmarks de 1 máquina, mas em benchmarks de 1 máquina, mas em ambientes de produção, com muitos usuários ambientes de produção, com muitos usuários obtendo grandes resultsets a carga de obtendo grandes resultsets a carga de memória cai, e muito.memória cai, e muito.– Resultado também sensível em DirectoryIteratorsResultado também sensível em DirectoryIterators

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ConclusãoConclusão

● A SPL, introduz ferramentas que aumentam a A SPL, introduz ferramentas que aumentam a produtividade, pela facilidade de uso e produtividade, pela facilidade de uso e implementação, além de aumentar a implementação, além de aumentar a performance de aplicativos com seus recursos performance de aplicativos com seus recursos e ter permitido o desenvolvimento de e ter permitido o desenvolvimento de funcionalidades que se utilizam desses funcionalidades que se utilizam desses poderosos recursospoderosos recursos

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

AplicaçõesAplicações

??

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ReferênciasReferências

● docs.php.net/spldocs.php.net/spl● www.php.net/~helly/php/ext/spl/www.php.net/~helly/php/ext/spl/● pt.wikipedia.orgpt.wikipedia.org● Enterprise PHP Management MagazineEnterprise PHP Management Magazine

– Gauthier Delamarre, Guillaume PonçonGauthier Delamarre, Guillaume Ponçon

Anderson CasimiroAnderson CasimiroSPL – Standard PHP LibrarySPL – Standard PHP Library

23:49

ContatoContato

● Anderson [at] duodraco.comAnderson [at] duodraco.com● [blog.]duodraco.com[blog.]duodraco.com● www.ophpen.org [em breve]www.ophpen.org [em breve]