Strings

Uma string é uma série de caracteres . No PHP , um caracter é o mesmo que um byte , ou seja , exatamente 256 caracteres diferentes possíveis . Isto implica que o PHP não tem suporte nativo ao Unicode .

Nota : Não nenhum problema nas strings se tornarem muito grandes . Não nenhum limite para o tamanho de strings imposta pelo PHP , então não razão para se preocupar com strings longas .

Sintaxe

Uma string literal pode ser especificada de três formas diferentes .



Aspas

Se a string é delimitada entre aspas ( " ) , o PHP entende mais seqüências de escape para caracteres especiais :

Tabela 7-1 . Seqüências de escape

Seqüência Significado
fim de linha ( linefeed ou LF ou 0x0A (10 ) em ASCII )
retorno de carro ( carriage return ou CR ou 0x0D (13 ) em ASCII )
TAB horizontal ( HT ou 0x09 (9 ) em ASCII )
contra barra ou barra invertida
sinal de cifrão
aspas
a seqüência de caracteres batendo a expressão regular dos caracteres em notação octal
a seqüência de caracteres batendo a expressão regular de um caracter em notação hexadecimal

Novamente se você tentar escapar qualquer outro caracter , a contra barra será impressa também !

Mas o mais importante dado a respeito de strings delimitadas por aspas está no fato de que nome de variáveis serão substituídos . Veja interpretação de strings para detalhes .

Heredoc

Outra maneira para delimitar strings é utilizando a sintaxe heredoc ( " " ) . É informado um identificador depois de , então a string , e então o mesmo identificador para fechar a delimitação .

O identificador de fechamento precisa começar na primeira coluna da linha . Além , o identificador utilizado precisa seguir as mesmas regras de nomeação que qualquer outro rótulo no PHP : pode conter caracteres alfanuméricos e sublinhados , e precisa começar com um caracter não numérico ou sublinhado .

Atenção

É muito importante verificar que a linha do identificador de fechamento não contenha nenhum outro caracter , exceto , possivelmente um ponto e vírgula ( ; ) . O que significa que o identificador não pode ser endentado , e que não pode haver nenhum espaço ou tabulações antes ou depois do ponto e vírgula .

Textos heredoc se comportam como strings delimitadas por aspas , com apenas uma diferença . Você não precisa escapar apóstrofos e aspas em seus heredocs , mas você ainda pode continuar utilizando os códigos de escape listados acima . Variáveis são substituídas , mas o mesmo cuidado precisa ser tomado quando expressando variáveis complexas dentro de heredocs assim como nas strings .

Exemplo 7-2 . Exemplo de delimitação de strings heredoc

 
 ?php

 
$str

 
=

 
EOD

 
Exemplo

 
de

 
uma

 
string

 
distribuída

 
em

 
várias

 
linhas

 
utilizando

 
a

 
sintaxe

 
heredoc

 
.




 
EOD

 
;

 
/

 
*

 
Exemplo

 
mais

 
complexo

 
,

 
com

 
variáveis

 
*

 
/

 
class

 
foo

 
{

 
var

 
$foo

 
;

 
var

 
$bar

 
;

 
function

 
foo(

 
)

 
    {

 
$this

 
-

 
foo

 
=

 
'Foo'

 
;

 
$this

 
-

 
bar

 
=

 
array('Bar1'

 
,

 
'Bar2'

 
,

 
'Bar3')

 
;

 
    }

 
}

 
$foo

 
=

 
new

 
foo()

 
;

 
$name

 
=

 
'Meu

 
nome'

 
;

 
echo

 
EOT

 
Meu

 
nome

 
é

 
"$name

 
"

 
.




 
Eu

 
estou

 
imprimindo

 
$foo

 
-

 
foo

 
.




 
Agora

 
,

 
eu

 
estou

 
imprimindo

 
{

 
$foo

 
-

 
bar[1]

 
}

 
.




 
Isto

 
deve

 
imprimir

 
um

 
'

 
A

 
'

 
maiúsculo

 
:

 
\x41

 
EOT

 
;

 
?





Nota : O suporte a heredoc foi acrescentado no PHP 4 .

Interpretação de variáveis

Quando uma string é especificada dentro de aspas ou heredoc , variáveis são interpretadas dentro delas .

dois tipos de sintaxe , um simples e um complexo . A sintaxe simples é a mais comum e conveniente , provendo uma maneira de interpretar uma variável , um valor de array ou uma propriedade de objeto .

A sintaxe completa foi introduzida no PHP 4 , e pode ser reconhecida por chaves ( {} ) envolvendo a expressão .

Sintaxe simples

Se um sinal de cifrão ( $ ) é encontrado , o interpretador tentará obter tantos identificadores quanto possíveis para formar um nome de variável válido . Envolva o nome da variável com chaves se você deseja explicitamente especificar o fim do nome .

 
$cerveja

 
=

 
'

 
Heineken'

 
;

 
echo

 
"O

 
sabor

 
das

 
'$cerveja's

 
é

 
otimo"

 
;

 
/

 
/

 
funciona

 
,

 
"'

 
"

 
é

 
um

 
caracter

 
inválido

 
para

 
nome

 
de

 
variáveis

 
echo

 
"Ele

 
bebeu

 
algumas

 
$cervejas"

 
;

 
/

 
/

 
não

 
funciona

 
,

 
's

 
'

 
é

 
um

 
caracter

 
válido

 
para

 
nome

 
de

 
variáveis

 
echo

 
"Ele

 
bebeu

 
algumas

 
${cerveja}s"

 
;

 
/

 
/

 
funciona



Similarmente , você também pode interpretar um índice de array ou uma propriedade de objeto . Com índices de arrays , o colchete de fechamento ( ] ) marca o final do índice . Para propriedades de objetos se aplicam as mesmas regras das variáveis comuns , embora não exista um truque para as propriedades de objetos como para as variáveis .

 
$frutas

 
=

 
array(

 
'morangos

 
'

 
=

 
'vermelho

 
'

 
,

 
'banana

 
'

 
=

 
'amarelo

 
'

 
)

 
;

 
/

 
/

 
note

 
que

 
isto

 
funciona

 
diferentemente

 
fora

 
de

 
delimitadores

 
de

 
string

 
echo

 
"Uma

 
banana

 
é

 
$frutas[banana]

 
."

 
;

 
echo

 
"Este

 
quadrado

 
tem

 
$square

 
-

 
width

 
metros

 
de

 
lado

 
."

 
;

 
/

 
/

 
Não

 
funciona

 
.




 
Para

 
uma

 
solução

 
,

 
veja

 
a

 
sintaxe

 
complexa

 
.

 
echo

 
"

 
Este

 
quadrado

 
tem

 
$square

 
-

 
width00

 
centímetros

 
de

 
lado

 
."

 
;



Para qualquer coisa mais complexa , você precisa utilizar a sintaxe complexa .

Sintaxe complexa ( chaves )

Isto não é chamado sintaxe complexa porque a sintaxe em si é complexa , mas porque você pode incluir expressões complexas desta maneira .

De fato , você pode incluir qualquer valor no que esteja no espaço de nomes dentro de strings com esta sintaxe . Você simplesmente escreve a expressão da mesma maneira que faria fora da string , e então incluí-la entre chaves . Desde que você não pode escapar ' {' , esta sintaxe somente será reconhecida quando o $ é imediatamente seguido de um { . (Utilize "{\$ " ou "\{$ " para obter um literal "{$" ) . Alguns exemplos para tornar isso mais claro :

 
$maravilhoso

 
=

 
'

 
fantástico'

 
;

 
echo

 
"Isto

 
é

 
{

 
$maravilhoso}"

 
;

 
/

 
/

 
não

 
funciona

 
,

 
imprime

 
:




 
Isto

 
é

 
{

 
fantástico

 
}

 
echo

 
"Isto

 
é

 
{$maravilhoso}"

 
;

 
/

 
/

 
funciona

 
,

 
imprime

 
:




 
Isto

 
é

 
fantástico

 
echo

 
"

 
Este

 
quadrado

 
tem

 
{$square

 
-

 
width}00

 
centímetros

 
de

 
lado

 
."

 
;

 
echo

 
"E

 
isto

 
funciona

 
:

 
{$arr[4][3]}"

 
;

 
/

 
/

 
E

 
isto

 
está

 
errado

 
pela

 
mesma

 
razão

 
/

 
/

 
como

 
$foo[bar

 
]

 
é

 
incorreto

 
fora

 
de

 
uma

 
string

 
.

 
echo

 
"Isto

 
está

 
errado

 
:

 
{$arr[foo][3]}"

 
;

 
echo

 
"Você

 
deve

 
fazer

 
desta

 
maneira

 
:

 
{$arr['foo'][3]}"

 
;

 
echo

 
"Você

 
pode

 
sempre

 
escrever

 
{$obj

 
-

 
values[3]

 
-

 
name}"

 
;

 
echo

 
"Este

 
é

 
o

 
valor

 
da

 
variável

 
chamada

 
$name

 
:

 
{${$name}}"

 
;



Funções úteis

Strings podem ser concatenados utilizando o operador ' . ' (ponto ) . Note que o operador ' + ' (adição ) não funciona para isso . Veja operadores de string para mais informações .

uma grande quantidade de funções úteis para modificação de strings .

Veja a seção de funções de string para funções gerais e funções de expressões regulares para busca e substituição avançada . ( em dois sabores : Perl e POSIX estendido ) .

também funções para strings URL e funções para criptografia e descriptografia de strings ( mcrypt e mhash ) .

Finalmente , se você ainda não encontrar o que está procurando , veja também as funções de tipos de caracteres .

Conversão de strings

Quando uma string é avaliada como um valor numérico , o valor resultante e o tipo é determinado como segue .

A string será avaliada como um ponto flutuante se conter qualquer um dos caracteres ' .' , 'e' , ou 'E ' . Em outros casos , ela será avaliada como um inteiro .

O valor é obtido da porção inicial da string . Se a string começa com dados numéricos válidos , esse será o valor utilizado . Em outro caso , o valor será 0 ( zero ) . Dados numéricos válidos são : um sinal opcional , seguido por um ou mais dígitos ( opcionalmente contendo um ponto decimal ) , seguido de um expoente , também opcional . O expoente é um ' e ' ou 'E ' seguido de um ou mais dígitos .

 
$foo

 
=

 
1

 
+

 
"

 
10.5"

 
;

 
/

 
/

 
$foo

 
é

 
ponto

 
flutuante

 
(11.5

 
)

 
$foo

 
=

 
1

 
+

 
"-1.3e3"

 
;

 
/

 
/

 
$foo

 
é

 
ponto

 
flutuante

 
(-1299

 
)

 
$foo

 
=

 
1

 
+

 
"bob-1.3e3"

 
;

 
/

 
/

 
$foo

 
é

 
ponto

 
inteiro

 
(1

 
)

 
$foo

 
=

 
1

 
+

 
"bob3"

 
;

 
/

 
/

 
$foo

 
é

 
ponto

 
inteiro

 
(1

 
)

 
$foo

 
=

 
1

 
+

 
"10

 
Small

 
Pigs"

 
;

 
/

 
/

 
$foo

 
é

 
ponto

 
inteiro

 
(11

 
)

 
$foo

 
=

 
4

 
+

 
"10.2

 
Little

 
Piggies"

 
;

 
/

 
/

 
$foo

 
é

 
ponto

 
flutuante

 
(14.2

 
)

 
$foo

 
=

 
"10.0

 
pigs

 
"

 
+

 
1

 
;

 
/

 
/

 
$foo

 
é

 
ponto

 
flutuante

 
(11

 
)

 
$foo

 
=

 
"10.0

 
pigs

 
"

 
+

 
1.0

 
;

 
/

 
/

 
$foo

 
é

 
ponto

 
flutuante

 
(11

 
)



Para mais informações sobre esta conversão , veja página do manual UNIX de strtod( 3 ) .

Se você deseja testar qualquer um dos exemplo dessa seção , você pode copiar e colar os exemplos e inserir as linhas seguintes para ver por si mesmo como isso funciona .

 
echo

 
"

 
\$foo==$foo

 
;

 
tipo

 
"

 
.

 
gettype

 
($foo

 
)

 
.

 
"

 
br

 
/

 
\n"

 
;