Em Busca da “Zend PHP Yellow Pages”
Archive for July, 2008
Operadores – parte VII – Operadores de comparação
Jul 31st
São operadores que estabelecem uma relação de equivalência entre dois valores. Eles tanto podem determinar se dois valores são iguais (ou não iguais) entre si, ou se um é maior (ou menor) do que o outro. O resultado de uma operação comparação é sempre um valor Booleano.
Existem quatro operadores de equivalência:
| == | Equivalentes. Verifica se os dois operandos são equivalentes, o que significa que eles podem ser convertidos para o tipo de dados comum que eles têm o mesmo valor, mais não necessariamente do mesmo tipo. |
| === | Identidade. Verifica se os operandos possuem o mesmo Tipo e têm o mesmo valor. |
| != | Não Equivalentes. Verifica se os dois operandos são não equivalentes, sem verificar o seu tipo. |
| !== | Operador não-idênticos. Verifica se os dois operandos não possuem o mesmo tipo de dados ou não têm o mesmo valor. |
É muito fácil confundir o operador de atribuição (=) pelo operador de comparação (==) e este é, na verdade, um dos erros mais comuns na programação. Uma solução parcial para este problema é utilizar um padrão de projetos em que o programador inverte a ordem de seus operandos quando se compara uma variável com valor. Por exemplo, em vez de:
echo $a == 10;
Você poderia escrever:
echo 10 == $a;
Estas duas operações são totalmente idênticas, mas, devido à esquerda operador ser um valor, se tivesse esquecido de um dos sinais iguais, o parser teria jogado um erro, assim, alertando-o para o seu erro.
Outros conjuntos de diferentes operadores estabelecem uma relação de desigualdade entre os dois operandos, ou seja, se um dos dois é maior do que o outro:
| < | Retorna true se o operando da esquerda for menor que o da direita. |
| <= | Retorna true se o operando da esquerda for menos ou igual ao da direita. |
| > | Retorna true se o operando da esquerda for maior que o da direita. |
| >= | Retorna true se o operando da esquerda for maior ou igual ao da direita. |
Embora o processo seja claro para os números, as coisas mudar um pouco para outros tipos de dados, por exemplo, strings são comparadas através da análise do valor binário de cada byte na seqüência até dois valores diferentes são encontrados, o resultado é então determinado pelo valor numérico desses dois bytes. Por exemplo:
$esquerda = “ABC”;
$direita = “ABD”;
echo (int) ($esquerda > $direita);
O código acima imprime 0 (ou seja, falso), porque a letra D é mais elevado na variável da direita, do que na letra C da variável da esquerda. Enquanto você pode poderia pensar que esta comparação ocorre por causa da ordem alfabética. Considere, os seguintes exemplos:
$esquerda = ’maça’;
$direita = ’Maça’;
echo (int) $esquerda > $direita;
Neste exemplo será impresso 1 (verdadeiro), pois o valor ASCII do caractere “a” é 97 que por sua ver é mais elevado que o caractere “A” que é 65.
OBS: A utilização de operadores comparação com arrays também introduz um conjunto de regras diferentes. Veremos mais adiante.
Operadores – Parte VI – Referenciado variáveis
Jul 21st
Por padrão, os operadores trabalham pela atribuição de valor, ou seja, eles copiar o valor de uma expressão para outra. Se do lado direito do operando for uma variável, somente seu valor será copiado, de modo que qualquer alteração subseqüente ao da esquerda do operador não será refletindo no operador da direita. Por exemplo:
$a = 10;
$b = $a;
$b = 20;
echo $a; // será impresso 10
Normalmente, você espera que esse seja o resultado obtido, mais a casos em que você queira uma tarefa que o resultado seja obtido por referência, de modo que a expressão da esquerda do operando torna-se “ligado” com a expressão da direita. Por exemplo:
$a = 10;
$b = &$a; // por referência
$b = 20;
echo $a; // será impresso 20
OBS: O operador trabalha pela atribuição de valor para todos os tipos de dados, exceto objetos, os quais sempre são passados por referência, independentemente do operador “&” ser usado ou não.
A utilização de variáveis por referência usada algumas vezes pode ser até útil, mas sempre será uma técnica PHP bastante arriscada, porque variáveis PHP tendem a permanecer ativas por um longo período de tempo, até mesmo dentro de uma função. Além disso, contrariamente ao que acontece em muitas outras línguas, essa tecnica muitas vezes é mais lenta do que a atribuição de valor, porque o PHP usa uma inteligente “deferred-copy” mecanismo que otimiza a realidade de valor atribuições.
Operadores – Parte V – Operadores de atribuição
Jul 16th
Com os operadores de atribuição é possível atribuir um valor a uma variável. Esse é um dos mais simples operadores e é composto por um sinal de igual (=) . Que nós já vimos em exemplos de posts anteriores.
$variavel = ’valor’;
// $variavel agora contem a string ’valor ’
Além disso, é possível combinar esse operador com todos os operadores aritméticos e de bits. Assim será possível executar uma ação e atribuir o valor a uma variável simultaneamente.
$variavel = 1;
// $variavel agora contem o valor inteiro igual a 1
$variavel += 3;
/*
$variavel agora contem o valor inteiro igual a 4
*/
Neste exemplo, estamos a unindo dois operadores, o operador aritmetico (no sinal de mais) com o operador de atribuição (sinal de igual) para acrescentar ao valor atual da nossa $variavel, o inteiro 3. Tornando assim o valor final igual a 4. Esta técnica pode ser usada com todos os operadores de bit e aritmético.
Operadores – Parte IV – Operadores de Bits
Jul 15th
Operadores de bits são usados para manipular bits de dados. Todos estes operadores são projetados para trabalhar apenas com números inteiros, por isso, o interpretador tentará converter os seus operandos para inteiros antes de executá-los.
O mais simples é operador de bit é o não binário, que negará todos os bits de um número inteiro.
Ex:
$x = 0;
echo ~$x; //irá imprimir -1
Um grupo de operadores binário é usado para executar a manipulação básica de bit, combinando os dois bits de seus operandos, de várias maneiras:
| & | Operador AND (e). O resultado da operação será um valor ativo caso eles estejam setados em ambos os operandos, e desativado caso contrário. |
| | | Operador OR (ou). O resultado da operação será um valor ativo caso eles estejam setados em algum dos operandos, e desativado caso não esteja em nenhum dos operandos. |
| ^ | Operador XOR (ou exclusivo). O resultado da operação será um valor cujo os bits serão ativos em um ou outro operando, e desativados caso contrario. |
Estas operações são todas muito simples, com a possível exceção do XOR (ou exclusivo), que pode parecer estranho à primeira vista. Na realidade, sua funcionalidade é bastante simples: se o bit à esquerda ou direita está configurado, o operando comporta exatamente como o OR (ou). Se ambos os bits estão ativados ou desativados, o resultado é simplesmente invertido.
Um terceiro conjunto de operadores é usado para transferir os bits da esquerda ou direita:
| << | deslocar bits para esquerda – Esta operação desloca à esquerda dos bits do operando por um número de posições igual ao direito do operando, introduzindo bits vazios nas posições de deslocamento. |
| >> | deslocar bits para direita – Esta operação desloca à direita dos bits do operando por um número de posições igual ao direito do operando, introduzindo bits vazios nas posições de deslocamento. |
É interessante notar que estas duas últimas operações proporcionam uma forma fácil (e muito rápida) de multiplicar inteiros com uma potência de dois. Por exemplo:
$x = 1;
echo $x << 1; // será impresso 2
echo $x << 2; // será impresso 4$x = 8;
echo $x >> 1; // será impresso 4
echo $x >> 2; // será impresso 2
Você deve, entretanto, estar ciente do fato que, mesmo que estas operações possam aproximar uma multiplicação ou uma divisão por uma potência de dois, não é exatamente a mesma coisa. Os cenários que podem ser obtidos resultados inesperados. Por exemplo, em uma máquina de 32 bits, vai acontecer o seguinte:
$x = 1;
echo $x << 32;
echo $x * pow (2, 32);
A segunda linha deste exemplo obterá saídas zero, porque todos os bits têm sido deslocado para fora do valor inteiro. Por outro lado, segundo o exemplo (que solicita o Pow () função para elevar o poder de 2 a 32) irá retornar o valor correto 4.294.967.296 que, casualmente, agora será um valor flutuante porque tal número não pode ser representado usando um inteiro de 32 bits.
Operadores – Parte III – Operador de concatenação de String
Jul 11th
Ao contrário de muitas outras linguagens de programação, PHP tem um operador especial para concatenar strings:
$string = “fute” . “bol”;
// $string agora contem o valor ’futebol’$string2 = “desalão”;
// $string2 agora contem o valor ’desalão’$string .= $string2;
// após a concatenação das duas variáveis, nós teremos a variavel $string igual a ’futeboldesalão’echo $string;
// será impresso ’futeboldesalão’
OBS: É importante lembrar que essa não é a melhor forma de se concatenar strings e sim que essa é a única maneira. Usar o operador de adição indicará que as strings serão convertidas primeiramente aos valores numéricos, e adicionadas em seguida (assim originando um valor numérico).
Operadores – Parte II – Operadores Aritméticos
Jul 10th
Operadores aritméticos são os responsáveis pelas operações matemáticas básicas.
| Adição | $a = 1 + 3.5; |
| Subtração | $a = 4 – 2; |
| Multiplicação | $a = 8 * 3; |
| Divisão | $a = 15 / 5; |
| Modulo | $a = 23 % 7; |
OBS: Lembre-se que alguns operadores matemáticos (por exemplo, o operador de adição) assumem um significado diferente quando aplicados a arrays. Falaremos disso mais adiante.
Operadores de incrementação e decrementação formam uma categoria especial de operadores, com eles é possível incrementar e decrementar valores inteiros. Eles são operadores unários, porque eles só aceitam um operando (ou seja, a variável que necessita ser incrementado ou decrementado), e podem mudar de comportamento, dependendo se forem usadas antes ou depois da variável.
A posição do operador determina se o ajuste será realizado antes, ou depois da devolução do valor:
- Se o operador estiver depois do operando, o interpretador irá primeiro retornar o valor atual da variável e depois incrementar ou decrementar o valor.
- Se o operador estiver antes do operando, o interpretador irá primeiro incrementar ou decrementar o valor, e depois retornar o valor.
Veja alguns exemplos:
$a = 1;
// Atribuindo o valor inteiro 1 para a variavel $aecho $a++;
// Imprimindo 1, $a agora é igual a 2echo ++$a;
// Imprimindo 3, $a agora é igual a 3echo –$a;
// Imprimindo 2, $a agora é igual a 2echo $a–;
// Imprimindo 2, $a agora é igual a 1
OBS: uso em excesso desse operador pode tornar seu código de compreensão difícil, até os melhores programadores algumas vezes são surpreendidos pelo uso desse operador. Por isso use-o com cautela.
Vale apena ressaltar também que esse operador deve ser utilizado para valores numéricos. Caso você tente incrementar uma string será retornado 1 como no exemplo abaixo:
$a = “teste”;
echo ++$a;
// será impresso 1 porque primeiro será convertido pra 0 e depois acrescentado 1.
Operadores – Parte I
Jul 9th
Como o próprio nome já diz. operadores são os responsáveis por operações. Existem muitos tipos de operações em PHP. Os mais usados são:
- Operadores de atribuição – Para atribuir dados a variáveis.
- Operadores aritméticos – Para a execução de funções básicas matemáticas.
- Operadores de String – para juntar strings.
- Operadores de Comparações – para comparar dados.
- Operadores Lógicos – Para executar operações lógicas em valores booleanos.
Além desses o PHP também fornece:
- Operadores de Bits – Para manipular Bits usando a matemática booleana.
- Operadores de controle do erro – Para suprimir erros.
- Operadores de execução – Para executar comandos de sistemas.
- Operadores de incremento e decremento – Para incrementar e decrementar valores numéricos.
- Operadores de tipo – Para identificar objetos.
OBS: Na maioria das vezes as operações são binárias o que significa que existem dois operandos. Todas as operações binárias usam a notação em que o operador está entre seus operandos (por exemplo: 2 + 2).