Você está na página 1de 11

Apêndice B

As novidades do PHP 5

O PHP 5, que teve suas primeiÉs versões beta lançadas nos dias 29 de junho e 30 de
outubro de 2003, traz diversos lecutsos novos aos desenvolvedores !leb, além de
algumas mudanças que visam melhorar o desempenho da linguagem. Atmvés da lei-
tula deste apêndice, você iú saber quais são as pdncipais nìudenças ocorridas nessx
nova versão, assin-ì como os motivos que levaram os desenvolvedores do PHP a im-
plenentáJas.

0 que muda no PHP 5?


Unlâ das principais mudanças da versão i consiste no amadurecimento do PHP no
que diz rcspeito à progmmação orientada a objetos (OOP). A panir dessa versào, o
PHP passa a operaÍ cor.Ìl a Zend Engine 2.0, utilizando um novo modelo de objetos.
Esse modelo deye conferir ao PHP, em termos de OOP, significativos ganhos de veÌo-
cìdade e performance, visto que ele é nìais otimizado e reaÌiza muito menos cópias
redundantes de dados, como ocorria no modelo antigo.

Apesar desse novo modelo de OOP ser a mudança mais ndical do PHP 5, tanbém
fonm acrescentados outros recumos interessantes nessa versão. Entre eles, uma lel-
nmenta embutida para trabalhar com bancos de dados SQL, chamada SQlire. Houve
ainda uma reformulação no suporte XML (Extensible Ma*up language), que agola
está baseado enÌ uma outra biblioteca, chamtda libxml2.Yeja mais detalhes sobre
essas e ouüas mudanças no ffnal desse apêndice,

PHP será uma linguagem orientada a objetos?


É importante deixar claro que, apesar da gnnde reformulação dos recursos de or ien-
tação a objetos, o PHP continuaú sendo uma linguagem proceduml. O objetivo que
Ìevou a equipe de desenvolvimento do PHP a realizar essas mudanças foi tornal a
linguagem mais competitiva enl relação às aplicaçõesJ2EE (como por exemplo aque-
las desenvolvidas comJSP -,frya Seryel Pages) e.NET.
450 PHP poro quem conhece PHP

UÌì)a aplicação JSP, po| exemplo, é essencillmente um programa Java embutido- E


ao contúrio do PHP,Java não é unu linguagem de script O PHP é â linguagem id€zl
para o desenvolvimento de aplicações l,)feb, visto que esse é um ambiente exúeÍrÌ3-
nìente dinânìico. Em relação à sintaxe da progrìrmação orientada a objetos no PHP í,
ela é bashnte parecida com a utìlizada noJava. Por essa Ëzão, os progranadores qlE
trabalham no ambienteJ2EE não terão muitas dificulúdes de adaptação.

conquistaros usnários que tmbeÌham com a platalormaJ2EE parcce seruma lerefa Ínais

fácil do que conquistar-aqueles que desenvolvem xplicações paÌa a platafbl ÍÌìa.NET, da


Microsoft. Isso porque os desenvolvedorcs de aplicaçÕes .NET utilizanÌ a linguagem
AsP (ácflve server Prg:es), já que ela é n'Ìuito bem suportada por essa plataforma.

Portanto, a forte ligação existente entre AsP e .NET seria um enrpecilho para fazs
conì que esses usuários uúlizassen outra linguagem. Nesse caso, o argumenb a hvor
do PHP é que, se o desenvolvedor oprasse poÍ utiliálo, seria nìuito nìais simples
realizar uma filcum migÍação das aplicações, visto que uma aplicação PHP funciorÌ3
nas pÍincipais plataiomras disponíveis no mercado. ou seja, o PHP não depende de
un único fabricante.

Compatibilidade entre as veÍsões 4 e 5


Em termos de compatibiÌidade, a maioÍia dos programas criados no PHP4 podem ser
utìlizados senì problemas no PHP 5, visto que as principais funcionalidades da lin-
guagem permanecem inaÌteradas, Porém, como a vercâo 5 possui novas cancteÍísú-
cas de orientação a objetos, alguns programas criados em com esse tipo de progra-
maçâo em PHP 4 poderão deixar de funcionar.

Pal: nÌanter a compatibilidade com alguns prognmas da versão anteriol, no PHP 5


tambénl será mantida a diretiva Íegisfer3Ìobals do arquivo de configuração pÀp.rnr,
embom pot questões de segu!Ìlnça o seu uso não seja Íecomendado. Se habilitada,
essa diretiva permite que as informações disponíveis a um proglama PHP (dados de
formuláÍio, cookies, variáveis de ambiente e do servidor) sejam acessadas pelo prG
prio non'ìe da variâvel, ao invés de utilizaÍ os arays superglobais do PHP ($_EÀV
$-GEI', $-POST, $-COOIQE e 6-SERVI'R). Por exemplo, poderíamos usar .Snome ao
lovês de $-POST[" nonte" ].

Essa diretiva está desxbilitada (vxlor Oll) desde a versão 4,2,0 do PHP, pois ela pode
Ìevarunr plognmadora deixal blechas de segumnça, como a apresentada no progra-
ma a seguir',

.?php
if (usua.io-autorizadoo) {
lautorizado = true;
)
if ($autorizado) {
include "conteudo.php" ;

]
Apêndice B . As novidodes do PHP 5 451

Veja que esse progÌama só existe um determinado conteúdo se o usuário tiver autoli-
zação para visualizí-lo, ou seia, quando avaiivel $autotizado for igual a Í/'ue. Corno
nesse caso a variáveI $autoizado n^o íoi inicializada, qualquer pessoa poderia cha-
mar essa página passando esse valor como parân:eÍo pelo nìétodo GET. Exenìplo:

progranâ. php?autori zado=1

Dessa folna, qualquer unÌ que âcessar o script dessa folma será autorizado a visuali-
zel o conteúdo-

As principais novidades

0rientação a objetos

un novo nodelo de objetos. Portanto, se


A pârtir da versão 5, o PHP pas$ a utilizar
você tenr programas cnì PHP cri3dos com o r ecurso de orientação a objetos, possivel-
mente teÍí que fazel algumas modificaçÕes paÍ:r que eles contìnuen funcionando
normalmente. O código responsável pela manipulação de objeros foi totalrìente rc-
escrito no PHP 5, apresentando agom um melhol desempenho, alénr de novas carac-
terísticxs,

A nìudança nesse modelo foi necessárie porque, enì versões anteliores do PHP, as
camcteústicas de OOP emm nuito rudinìentares. Os objetos er:n nr:tnipul:rdos cotno
tipos prirÌritivos (ex inteiros, súings). Dessa forma, ocorriam nìuitas cópias redun-
danres de dados, pois o objeto inteiro ere copiado sempre que houvesse arribuiçaÌo 3
uma variível, ou se ela fosse passada como paúmetro para urn método. No novo
modelo, os objetos não são referenciados por valor, mas sim poÍ unr hrnd.le, que
pode ser visto como um idenrificador do objeto. A seguir são apresenradas algutnes
das novas caracteústicas da OOP existentes na veÍsão 5 do PHP.

Variáveis privadas e protegidas

Cortr as palavns-ch^ve " ptivete" e " ptorected' podemos criar, respectivamente, vári-

áveis pl'ivadas e protegidas em ulna classe. Urla variável privada só poderá ser aces
sada pela próplia classe onde ela foi declamda, enquanto que urna valiável proregida
podeú ser acessada tambénÌ pelâs subclasses da classe onde ela ttri declarada. Veja
um exemplo.

<?php
class cl assel i
private Ívarl = "olá, va.l!\n":
protected $var2 = "0ìá, var2l\n";
protected tvaÍ3 = "oìá, var3!\n";
function bonDjaO {
print "classel: ". trhis->vàrl. "<bD";
print "classel: ". $thjs->va12. "<br>";
452 PHP poro quem conhece PHP

print "cìassel: ". Jlhis->vÀr3. '<br><br>";

class classe2 ertends classel {


function bomoiaO {
classel::bonDiao; // Étib.
prinÌ "classe2: " tthis->varl. "<bè"i // ltáo exìbe nada
prinÌ "cla5se2r " Sthis->var2. "<bí>"; // Exibe
print "CÌasse2: " lthis->var3. "<bD'il/ Exibe
]
i
lobj - new cla5selo '
Sobj->bomDiâO;
tobj = nerl Classe2o;
lobj->bomoi aO;

Nesse exemplo foram criadas duas classes, chamadas Classel e CIasseZ sendo que a
segunda é subclasse da primeiÉ. A variável $varl foi declarada como privada (prirz-
tQ, e ponanto ela só podeú ser rcessadx pela pÍópÍia C/assel. As variáveis $var2 e
,tvrrJsão prctegidas (protecre@, e portânto podem seÍ acessadas pela subclasse C,/as-
se2.

Métodos privados e pÍotegidos

Uma classe pode conÌer mmbém métodos privados ou protegidos. Da mesma forma
que as variâveis, um método pÍivado só pode ser acessado pela pÍópria clâsse onde
ele foi declarado, enquanto que o protegido pode ser acessado pelas subclasses, Exem-
plo:

<?php
class classel {
prlvate functioí ttetodopaivadoo {
echo "Cìâsse1: :itetodoprivadoO chafi ado. <br'" ;
)
p.otected function rctodoprotegidoo {
echo "CÌass€1: itretodoprotegidoO chanado.<bl>";
Íthi s->MerodoprivadoO ;
)
)
class cÌasse2 extends classel {
pubìic function üetodopublicoo {
echo "cì asse2 i :Metodopubl icoO chanado, <br>" ;
Íthi s->rctodoprotegidoO ;
]
]
tobj = n€w cìasse2;
$obj - >fletodopub ì i coO;
?>
As novidodes do PHP 5

e foi chamado o méto-


Nesse exemplo, foi criado um obieto para a subclasse C/asse2'
o MetodoPrctegidoQ de
do MetodoPublicoo. Esse nìétodo, por sua vez' chamado
Uma chamâdâ direta da
sua superclasse, que por sua vez cham a o MetodoPdvadoQ'
C,lasse2 ao método ptivado não iria funcionar'

(lasses e métodos abttratos

que o método é aPenas


No PHP 5 é possível cÍiar métodos abstratos lsso siSniflca
declarado, nlas sua implemenração não ê fornecida lsso será feito postedormente
em outn classe. ExemPlo:

<?php
abstract clâs5 classeabstrata {
abstract Public funclion test€O;
)
c1âss cìa5serfiple êntacao extends cìasseÂbstrata {
public fun<tion testeo {
echo "{étodo test€O <haíado!<bD";
)
)
Sobj = nelr clâssêImplenenta'ao:
$obj->testeO;
?>

defìnida como
Veia que a classe que contém o método abstrato também deve ser
abstrata, e não podeú ser utilizada para criar obietos diretamente'

lnteÌfa(es

No PHP 5 também iemos a Possibilidade de criar interfaces Nelâs' inseÍimos


apenas
parte classe que irá implementá-la É um
as declaÍâções dos métodos que farão da
é que uma classe pode
recurso semelhantes às classes abstratas. uma das diferenças
pa'nt
ìnplementar dive$as intel.faces Utilizamos a palavm reservada "implemend'
indicat que uma classe íÌÌplemenE unra deteÍminadâ interface' Exemplo:

.?php
interface uinharnterfacê {
public function ÍesteO;
l
class l,linhacÌasse implen€nts l'linhahterfaçe {
pub]ic function Íesteo {

)
)
454 PHP poro quem conhece PHP

Definição de tipos de paÍâmetnrs

Embora o PHP sejâ totalmente flexível em relação aos dpos de dados, poclemos indi_
car a ele qual o tipo de paúme[o que espenrnos receber paÍa unì determinado mê_
todo. Por exenìplo, observe o código apresenrado a seguir.

<?php
lnÌerface rnterl {
function Íeste(hterl tlntert) ;

)
class Minhaclâsse impl€neÍts rntell {
function Teste(Ìnte11 gInterl) {

)
Ì
$obj1 = new Mi nhaclasse;
Jobj2 = new i{inhacìassei
tobjl->Ìeste(tobj2) i
?>

Nesse exenplo, esarnos indicando ao pHp que o parâmetro da função Ieste deve ser
do tipo InÍert, ou seja, um obieto ú cÌasse que implementa essa interface. Se o paú-
metro passado não for.desse fipo, serâ gerada uma mensagem de erro. Essa resÍição
de tipos é pernÌitida apenas pam classes, e não para os tipos embutidos da linguagem.

A palavra-chave"final"

Os métodos que forem declarados com a palavr:a ,,


íìmp não podeÍão ser sobrescritos
pelas subclasses, Exemplo:

<?php
class flinhaclasse {
finaì funcrlon resteo {
// ...
]
,

Nesse exe.rplo, se fosse declando um método cont o nome ?esre em uma


subclasse
de MinhaClasse,ele não iria sobrescrever o método declarado como final. Também
é
possível declarar uma classe como final, ExempÌor

.?php
flnal class Minhâclasse {
// ...
.)

Isso significa que ela não poderá ter subclasses. poflanto, a linha de código
apresen-
rada a seguir não iria funcionar,,

cìass outraclasse extends inhaclasse {}


Apêndice B . As novidodes do PHP 5 455

(onstrutores e destrutores

Um constl'utol' consiste em um mêtodo que seú chamado toda vez que for criado um
objeto da classe onde ele foi declarado. Portanto, pode ser usado paÌa inicializar um
objeto antes dele ser usado. Ao contrário das versões anteriores, onde o constÍutoÍ
deveria possuil o nìesmo nome da classe, no PHP 5 esse método deve ser criado com
o nome Exemplo:
-corstÍucrQ.
<?php
class classe {
function {
print-constructO
"Este é o contrutor da cÌasse<br>";
i
1

cÌass subclasse exlends Classe {


function {
-constructO
parent::-consttucto;
print "Este é o contrutor da Subclasse<br>";
]
]
$obj = nelr Classeo;
$obj = nel,tl Subclasseo;

A vantagent dessa mudança éque, se a segunda classe úvesse que ser movida pam ser
subclasse de alguna outla, não haveÍia a necessidade de alterar o seu código, já que
todos os construtorcs estariam nomeados como _consfructQ. Por questões de com-
patibilidade, se o PHP não encontmr o mérodo _construcú ele irá procumr por un)
método que possua o rnesmo nome da classe,

Além de um consÍutor', uma classe pode ter tambén um desüutol, que deve ser no-
meado como _desrucro Um destrutor é o método que se1á chamado após a última
rcferência feìta a unl objeto no programa, antes da libemção da memória. Exemplor
.?php
c ìass t\,tinhâClasse {
functjon {
-constructO
$this->non€ = "MinhaclassÊ";
print "Este é o construtor dà cìasse ". gthis->noÍ1e,"<br>";
]
function _destructO {
print "Éste é o destrutor da classe ". gthjs->nome;
]
Ì
$obj = nelll Minhacìasseo '

Um destrutor pode ser útìl pata fins de depumção, fechamenro de conexão com ban-
co de dados, entre outms tarefas.
456 PHP poro quem conhece PHP

Constantês

Utilizando a palavm-chave consr podemos definir constantes dentro de uma classe.


Para obteL o valol de uma constante fora da classe, deve ser usada a sintâxe
Classe::Constante, coÍno mostn o exemplo a seguir.

<?php
class üinhaclâs5e {
const constante = "tester';
)
echo "O valor dà constanle é " Minhaclasse::Constânte;
?>

Exceçôes

A manipulâção de exceções também é unìa novidade da versão 5 do PHP. Podemos


inrplementâìa utilizando as palavras-chave thrcw, úy e crrc.rì. A idéia é separar os
dados da aplicação dos erros. Uma execeção é gerada com o comando throw. Os
conrandos try/catch são pcÍecidos com o condicional rÍlelse, mas foram cdados es-
pecialnente pam o tmtamento de exceções. Acompanhe o progranra apresentado a
seguit que gera u[ra exceção quando o parâmetÍo "ecado" não possuir exat.1men-
te 2 camcteres.

<?php
function buscaEstado (testado) f
if (s!rlen($estado) != 2)
throví new Exception('o estÂdo dev€ possuir obrìgatorianente 2 caracteres.,);
testados = array ('pR' ,,RJ', 'Rs,,'sc',,sp');
if (i n_arrây(tesrado, testados))
return tfuei
eìse
return fal se;
)
// Se o usuário não fornêcêu o parânetro estado, inicializa corÌì t4G

if (!i 5 set ( S_GEr [.es Ìedo' ]) )


l-cEÍ['estado' ]-'i,rc' ;

// TenÌa executar â função para buscaa o estado


try
{
if (lbuscaEstado(t-GFr[,êstado']))
êcho "0 estâdo ".$_GETI,estado,1," não fo.i enconÌrâdo.";
eìse
echo t_cÉÌ['estado']. " foi encontrado!";
Ì
catch (Exception Je)
{
echo (te->gerüessageO) ;
Ì

Esseprogmma recebe, pelo método GET, um parâmetro chamado .,esrado,,, Se o pa_


râmeüo não for fornecido, seú assumido o valor,,MG". Se ele for fornecido, seú
Apêndice B . As novidodes do PHP 5 157

chanada a função óuscaEstadoQ para verifical se o estado é válido. Nesse exemplo,


os valores válidos são PR, RJ, RS, SC, SP

Se o estado possuir 2 camcters, a função iú retornar verdadeiro (a'ue) ou falso (false),


indicando sua validade. Caso conarário, a execução da função seú interrompida devi-
do i genção de unÌâ exceçío, e serão executados os comandos deffnidos no bloco
catch. A classe Exceptjon é predefinida pelo PHP 5. Supondo que esse programa seja
nomeado como estado.php, veja a seguir três possiveis chamadas, assim como os
resultados gerados por cada uma delas.

€stado.php?estado-Rs (retornatrue)
estado.php?estado-Ac (retorna fa'ls€)
êstado. php?estado-ÍEsÌE (gera una exceção)

VaÍiáYeis e métodos estáti(ot

As variáveis estáücas (precedidas pela palayra stafD agora podem ser iniciâlizadas,
como mostm o exemplo a seguiÍ.

.?php
cìass Classe {
stâtic Jvari Àv€ì-€staÌica = 10;
l
print cìa5se: : Ívariaveì_estatica;
?>

Além disso, no PHP 5 a palavra sraa? também pode ser usada para defìnir um nrétodo
como esútico. Dessa forma, é possível chamálo mesmo sem a cÍiação de um obiero
pam a classe onde ele foi declarado. Exemplo:

<?php
class Clasie Í
publlc statjc function tt€todoEstatico0 {
// ...
]
l
Cl asse: : [,le todoEstatì co O ;

?>

A palavra-chave "instanceoÍ"

Pode ser utilizada pam testar se um objeto é instância de uma determinada classe. Por
exen:plo, o código a seguir testa se o objeto $, é uma insúncia da classe MinhaClasse.

<?php
cìass Mi nhacÌasse { }
tà = nev, üi nhaclasse;
if (Ía instanceof üinhaclasse) {
echo "É un objeto da cÌassel";
)
458 PHP poro quem conhece PHP

outÍas mudanças na 00P

Neste apêndice fomm apresentadas as principais mudanças ocorridas na prognma-


ção odentada a objetos no PHP. Para obter mais informações sobre essas e outüs
alterações na OOP, consulte o site oficial do PIHP (http://www.phP.net), onde esÍí
disponível uma página que ìista as câncterísticxs da Zend Engine 2.

SQLite

Outra novidade do PHP 5 é o SQLite, uma fermmenta SQL embutida. Os progmlnas


que acessarcnì o SQLite poderão trabalhar com bancos de dados SQL, sem que haja a
necessidade de ter unì SGBD (con'ìo MySQL ou Postgr€SQL) instalxdo. A biblioteca
SQLite Ìê e gmva dados diretamente em arquivos de bancos de dados no disco Por-
tanto, o SQLite é uma boa alternativa p:Ìn quen ptecisa de velocidade e nào necessi-
ta de todos os reculsos oÍèrecidos pelos SGBDS mais "pesados".

h ttp:,//6qlite.org.Veia' a seguir
Mais inlormações sobre o SQLite podem ser obtidas em
um exemplo de progmlna PHP envolvendo a criação de uma tabela, inserção de um
r€gistlo, consulta e tmtamento dos resultados.

<?php
jf ($db = sqlitLopen('meubancosql ite' , 0666, $erro))
{
sql ite-query(tdb,'CREÁTE ÌÂBLE enaì I s (emai I varchar(80))' ) ;
sqlite-query(Ídb,"rNsERT rNTo enails vaLUE5 ('juliano@niederauer.con.br')");
$res = sqlite-query($db,'select o fÍom enails');
$ârray = sql i te-fetch-array(Jres) i
foreach(Íârray as $chave=>$valor)
echo "$chave => $valor<Bb"i
sql'ite-close ($db);
)
else
die ($erro);
?>

Suporte XML

Até a versão 4 do PHP, o suporte XML en baseado em três bibliotecas de terceiros:

. A txpaÍ, dejanìes Clark, pam a cliaçío de um pa$er SAX.

. A 1ibxm.l, do projeto Gnon.Ìe, para a crixção de um parser DOM.

. A Sablotlon, da Ginger Alliance, paÌa tmnslormações com XSLT.


Apêndice B . As novidodes do PHP 5 459

Como elas são desenvolvidas pol tr'ês fornecedores distintos, aunìenta basmnte a di-
ficuldade de manutenção dessas bibliotccas por parÌe da equip€ de desenvolvinìento
do PHP. Âlém disso, apesar da Expar ser estável e sofier poucas mudanças, ela ainda
possui liuÌitações elÌÌ sua fìncionaÌidxcle.

No PHP 5, o suporte a xML fbi toLÌlnìente modiftcado. Nessâ veÍsâo, todas as exten-
sóes são baseadas n a biblioÍeca bxn1l2, do projeto Gnome. Você irá encontrar mais
inforrrações sobr€ essa biblioteca em .ir ttp://www.x!11lsaÍi.org Tmta-se de um passo
ilnportante parJ o PHP se tornal uma das linguagens mais eficientes para a manipula-
ç:1o de documentos XML na Web.

Outra novidade da versâo 5 foi a inclusio de unta nova exÌensâo chamada Srnrple-
XMt, que permite fácil acesso e manil>nlação dos dados XML por neio de objetos do
PHP.

0utras mudanças

Além das nìudanças apresentadas neste apêndice, a novx versão do PHP traz mais
algumas novidades. Entre elas, podem ser destacadas o apedeiçoamento do suporte
,J strcxnts, remoção da biblioreca enÌburida MySQL, meÌhora no desempenho de al-

gumas funções, acÉscimo de funções em alguns módulos e correção de divercos


defeiros (bLÌg:s). Pxm estar serììpre atualizado em rclação às n.ìudanças ocolridas nes
últimas versÕes do PHP, consulte periodicamente a lìsta de mudanças (Changelog),
publiceda após o lançanrento de cada veÍsio no site http://www.php.net.

Você também pode gostar