Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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,
conquistaros usnários que tmbeÌham com a platalormaJ2EE parcce seruma lerefa Ínais
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.
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:
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
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.
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
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.
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
<?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
.?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
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"
<?php
class flinhaclasse {
finaì funcrlon resteo {
// ...
]
,
.?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,,
(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
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
<?php
class üinhaclâs5e {
const constante = "tester';
)
echo "O valor dà constanle é " Minhaclasse::Constânte;
?>
Exceçôes
<?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
€stado.php?estado-Rs (retornatrue)
estado.php?estado-Ac (retorna fa'ls€)
êstado. php?estado-ÍEsÌE (gera una exceção)
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
SQLite
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
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-