OPERADORES
® Operadores Aritméticos
® Operadores de Asignación
® Operadores de Bits
® Operadores de Comparación
® Operadores de Control de Errores
® Operador de Ejecución
® Operadores de Incremento/decremento
® Operadores Lógicos
® Operador de cadenas de texto
® Operadores de Matrices
® Operadores de Tipo
® Precedencia y asociatividad de operandos
5.1. Operadores Aritméticos
Disponemos de los clásicos operadores aritméticos:
Operación Nombre Resultado
$a + $b Suma Suma de $a y $b.
$a - $b Resta Diferencia entre $a y $b.
$a * $b Multiplicación Producto de $a y $b.
$a / $b División Cociente de $a y $b.
$a % $b Módulo Resto de la operación $a / $b.
-$a Negación El opuesto de $a
5.2. Operadores de Asignación
El operador básico de asignación es "=". A primera vista podrías pensar que es el
operador de comparación "igual que". Pero no. Realmente significa que el operando de
la izquierda toma el valor de la expresión a la derecha, (esto es, "toma el valor de").
El valor de una expresión de asignación es el propio valor asignado. Esto es, el
valor de "$a = 3" es 3. Esto permite hacer cosas curiosas como
$a = ($b = 4) + 5; // ahora $a es igual a 9, y $b vale 4.
Además del operador básico de asignación, existen los "operadores combinados"
para todas las operaciones aritméticas y de cadenas que sean binarias. Este operador
combinado permite, de una sola vez, usar una variable en una expresión y luego
establecer el valor de esa variable al resultado de la expresión. Por ejemplo:
$a = 3;
$a += 5; // establece $a a 8, como si hubiésemos escrito: $a = $a + 5;
$b = "Hola ";
$b .= "Ahí!"; // establece $b a "Hola Ahí!", igual que si hiciésemos $b = $b . "Ahí!";
Al igual que en C, C++ y Java, en PHP se dispone de estos operadores
combinados para, en una sola operación, operar sobre una variable y asignarle a esa
misma variable el resultado. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
60
Las operaciones susceptibles de ser usadas con estos operadores son:
+ - * / % & ^ . >> y <<
resultando en los nuevos signos de operación-asignación:
+= -= *= /= %= &= ^= .= >>= y <<=
Ejemplos de uso:
$var1 += 3; // $var1 = $var1 + 3;
$var2 /= 2; // $var2 = $var2 / 2;
$var3 >>= 1; // $var3 = $var3 >> 1;
Fíjese en que la asignación realiza una nueva copia de la variable original
(asignación por valor), por lo que cambios a la variable original no afectan a la copia.
Esto puede tener interés si necesitas copiar algo como un array con muchos elementos
dentro de un bucle que se repita muchas veces (cada vez se realizará una nueva copia
del array). PHP soporta asignación por referencia, usando la sintaxis $var =
&$othervar; , pero esto no es posible en PHP3. 'Asignación por referencia' quiere decir
que ambas variables acabarán apuntando al mismo dato y que nada es realmente
copiado. A partir de PHP5 los objetos son asignados por referencia a menos que
explícitamente se diga lo contrario con la nueva palabra clave clone.
5.3. Operadores de bits
Veamos ahora los operadores BIT a BIT de que dispone PHP:
Operación Nombre Resultado
$a & $b Y Se ponen a 1 los bits que están a 1 en $a y $b.
$a | $b O Se ponen a 1 los bits que están a 1 en $a o $b.
$a ^ $b
O Exclusivo
(XOR)
Se ponen a 1 los bits que están a 1 en $a o $b, pero no
en ambos.
~ $a No Se invierten los bits (se cambian 1 por 0 y viceversa.)
$a << $b Desp. Izq.
Desplaza $b posiciones a la izquierda todos los bits de
$a (cada posición supone multiplicar por dos).
$a >> $b Desp. Drch.
Desplaza $b posiciones a la derecha todos los bits de $a
(cada posición supone dividir por dos).
5.4. Operadores de Comparación
Los operadores de comparación, como su nombre indica, permiten comparar dos
valores.
Operación Nombre Resultado
$a == $b Igualdad
Compara si el valor de los dos operandos es el
mismo.
$a === $b Identidad
Compara si el valor es el mismo y, además, el
tipo coincide (A partir de PHP4).
$a != $b No igual Cierto si el valor de $a no es igual al de $b.
$a !== $b No idéntico
Cierto si $a no es igual a $b, o si no tienen
el mismo tipo.
$a < $b Menor que Cierto si $a es estrictamente menor que $b. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
61
Operación Nombre Resultado
$a > $b Mayor que Cierto si $a es estrictamente mayor que $b.
$a <= $b Menor o igual que Cierto si $a es menor o igual que $b.
$a >= $b Mayor o igual que Cierto si $a es mayor o igual que $b.
$a <> $b No igual Cierto si el valor de $a no es igual al de $b
Si se compara un entero con una cadena, la cadena es convertida a un número. Si
se compara dos cadenas numéricas, son comparadas como enteros. Estas reglas también
se aplican a la sentencia switch.
Otro operador condicional es el operador "?:" (o ternario), que funciona como en
C y otros muchos lenguajes.
(expr1) ? (expr2) : (expr3);
La expresión toma el valor expr2 si expr1 se evalúa a cierto, y expr3 si expr1 se
evalúa a falso.
$cad = $a > $b ? “a es mayor que b” : “a no es mayor que b”;
5.5. Operadores de Control de Errores
PHP ofrece soporte para un operador de control de errores: el signo de arroba
(@). Cuando es colocado al comienzo de una expresión en PHP, cualquier mensaje de
error que pudiera generarse a causa de esa expresión será ignorado.
Si la característica track_errors está habilitada, cualquier mensaje de error
generado por la expresión será almacenado en la variable $php_errormsg. La variable
será sobrescrita en cada instancia de error, así que realice sus chequeos de forma
temprana si quiere usarla.
<?php
/* Error intencionado de archivo */
$mi_archivo = @file ('archivo_que_no_existe')
or die ("La apertura de archivo ha fallado: el error fue
'$php_errormsg'");
// esto funciona con cualquier expresión, no solo con funciones:
$valor = @$cache[$llave];
// no producirá una anotación si el índice $llave no existe.
?>
Puede usar el operado @ al inicio de variables, llamadas a funciones y sentencias
include(), constantes. No puede usarlo sobre definiciones de función o clase, ni sobre
estructuras condicionales como if y foreach.
5.6. Operador de ejecución
PHP soporta un operador de ejecución: la comilla invertida (`). ¡Fíjese que no
son comillas normales! PHP intentará ejecutar la instrucción contenida dentro de las PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
62
comillas invertidas como si fuera un comando del shell; y su salida devuelta como el
valor de esta expresión (i.e., no tiene por qué ser simplemente volcada como salida;
puede asignarse a una variable). El uso de este operados es idéntico a la función
shell_exec().
$output = `dir /a-d`;
echo "<pre>$output</pre>";
5.7. Operadores de Incremento/decremento
PHP soporta los operadores de pre y post decremento y incremento al estilo de
C. Estos operadores no afectan a valores booléanos y incrementar NULL resulta en 1.
Operación Nombre Resultado
++$a Pre-incremento
Incrementa $a en 1, y devuelve $a (ya
incrementado)
$a++ Post-incremento
Devuelve $a (sin incrementar), y después lo
incrementa en 1.
--$a Pre-decremento Decrementa $a en 1, y después lo devuelve.
$a-- Post-decremento Devuelve $a, y después lo incrementa en 1.
He aquí un listado de ejemplo:
<?php
echo "<h3>Postincremento</h3>";
$a = 5;
echo "Debería ser 5: " . $a++ . "<br>\n";
echo "Debería ser 6: " . $a . "<br>\n";
echo "<h3>Preincremento</h3>";
$a = 5;
echo "Debería ser 6: " . ++$a . "<br>\n";
echo "Debería ser 6: " . $a . "<br>\n";
echo "<h3>Postdecremento</h3>";
$a = 5;
echo "Debería ser 5: " . $a-- . "<br>\n";
echo "Debería ser 4: " . $a . "<br>\n";
echo "<h3>Predecremento</h3>";
$a = 5;
echo "Debería ser 4: " . --$a . "<br>\n";
echo "Debería ser 4: " . $a . "<br>\n";
?>
5.8. Operadores lógicos
Los operadores lógicos realizan operaciones dependiendo del valor booleano de
los operandos.
Operación Nombre Resultado
$a and $b Y Cierto si $a y $b son ciertos.
$a or $b O Cierto si $a o $b es cierto.
$a xor $b O Exclusivo.
Cierto si $a o $b es cierto, pero no
ambos.
! $a No Cierto si $a es falso.
$a && $b Y Cierto si $a y $b son ciertos.
$a || $b O Cierto si $a o $b es cierto. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
63
La razón de que haya dos operadores distintos para las operaciones Y y O lógicas
es que tienen distinta precedencia.
5.9. Operador de cadenas de texto
Para operar con cadenas sólo disponemos de un operador: la concatenación de
cadenas representada por el punto ‘.’.
Por ejemplo:
$a = 1;
$b = 2;
$c = “El resultado de “ . $a . “ + “ . $b . “ es “ . ($a + $b);
Que dejaría en $c la cadena “El resultado de 1 + 2 es 3”. Antes de cada
concatenación se realizarán las conversiones de tipo que fueran necesarias (en el
ejemplo, los enteros se convierten a cadenas.)
5.10. Operadores de Matrices
Ejemplo Nombre Resultado
$a + $b Unión Unión de $a y $b.
$a == $b Igualdad Cierto si $a y $b tienen las mismas parejas llave/valor.
$a=== $b Identidad
Cierto si $a y $b tienen las mismas parejas llave/valor
en el mismo orden y de los mismos tipos.
$a != $b
Noigualdad
Cierto si $a no es igual a $b.
$a <> $b
Noigualdad
Cierto si $a no es igual a $b.
$a!== $b
Noidentidad
Cierto si $a no es idéntico a $b.
El operador + adiciona elementos de las claves restantes de la matriz del lado
derecho a aquella al lado izquierdo, al mismo tiempo que cualquier clave duplicada NO
es sobrescrita.
<?php
$a = array("a" => "manzana", "b" => "banano");
$b = array("a" => "pera", "b" => "fresa", "c" => "cereza");
$c = $a + $b; // Unión de $a y $b
echo "Unión de \$a y \$b: \n";
var_dump($c);
$c = $b + $a; // Unión de $b y $a
echo "Unión de \$b y \$a: \n";
var_dump($c);
?>
Cuando sea ejecutado, este script producirá la siguiente salida:
Unión de $a y $b:
array(3) {
["a"]=>
string(7) "manzana"
["b"]=> PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
64
string(6) "banano"
["c"]=>
string(6) "cereza"
}
Unión de $b y $a:
array(3) {
["a"]=>
string(4) "pera"
["b"]=>
string(5) "fresa"
["c"]=>
string(6) "cereza"
}
Los elementos de las matrices son considerados equivalentes en la comparación
si éstos tienen la misma clave y valor.
<?php
$a = array("manzana", "banano");
$b = array(1 => "banano", "0" => "manzana");
var_dump($a == $b); // bool(true) tiene las mismas clave-valor
var_dump($a === $b); // bool(false) pero en orden distinto
?>
5.11. Operadores de Tipo
instanceof es usado para determinar si una variable PHP es una instancia de
objeto de cierta clase:
<?php
class MiClase
{
}
class NoMiClase
{
}
$a = new MiClase;
var_dump($a instanceof MiClase);
var_dump($a instanceof NoMiClase);
?>
El resultado del ejemplo sería:
bool(true)
bool(false)
El operador instanceof fue introducido en PHP5. Anteriormente se usaba la
función is_a() pero desde la introdución del operados instanceof, la función anterior se
considera obsoleta.
5.12. Precedencia y asociatividad de operandos
La precedencia de los operandos resuelve el orden en el que se evalúa una
expresión múltiple que no ha sido delimitada con paréntesis. Por ejemplo, 1 + 5 * 3 en
PHP daría como resultado 1 + (5 * 3) = 16 y no (1 + 5) * 3 = 18 ya que el producto
tiene mayor precedencia que la suma. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
La tabla muestra la asociatividad de los operandos en PHP, y está ordenada en
orden creciente de precedencia (los más prioritarios al final):
Asociatividad Operandos
izquierda ,
izquierda or
izquierda xor
izquierda and
Derecha = += -= *= /= .= %= &= |= ^= ~= <<= >>=
izquierda ? :
izquierda ||
izquierda &&
izquierda |
izquierda ^
izquierda &
no-asociativo == != === !==
no-asociativo < <= > >=
izquierda << >>
izquierda + - .
izquierda * / %
derecha !
no-asociativo
~ - (int) (float) (string) (array) (object)
(bool) @
no-asociativo ++ --
izquierda [
no-asociativo clone new
La asociatividad de izquierda quiere decir que la expresión es evaluada desde la
izquierda a la derecha, la asociatividad de derecha quiere decir lo contrario.
<?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2
$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
?>