JTagua

Inicio » PHP » Variables, PHP

Category Archives: Variables, PHP

Anuncios

Tutorial PHP: Variables predefinidas.

PHP proporciona una gran cantidad de variables predefinidas para todos los scripts. Las variables representan de todo, desde variables externas hasta variables de entorno incorporadas, desde los últimos mensajes de error hasta los últimos encabezados recuperados.

Tabla de contenidos

Superglobals — Superglobals son variables internas que están disponibles siempre en todos los ámbitos
$GLOBALS — Hace referencia a todas las variables disponibles en el ámbito global
$_SERVER — Información del entorno del servidor y de ejecución
$_GET — Variables HTTP GET
$_POST — Variables HTTP POST
$_FILES — Variables de Carga de Archivos HTTP
$_REQUEST — Variables HTTP Request
$_ENV — Variables de entorno

$_SESSION — Variables de sesión
$_COOKIE — Cookies HTTP
$php_errormsg — El mensaje de error anterior
$HTTP_RAW_POST_DATA — Datos POST sin tratar
$http_response_header — Encabezados de respuesta HTTP

$argc — El número de argumentos pasados a un script
$argv — Array de argumentos pasados a un script

Superglobals

Superglobals — Superglobals son variables internas que están disponibles siempre en todos los ámbitos.

No es necesario emplear global $variable; para acceder a ellas dentro de las funciones o métodos.

Las variables superglobals son:

  • $GLOBALS
  • $_SERVER
  • $_GET
  • $_POST
  • $_FILES
  • $_REQUEST
  • $_ENV
  • $_SESSION
  • $_COOKIE

$_SERVER

(PHP 4 >= 4.1.0, PHP 5)

Información del entorno del servidor y de ejecución

Descripción

$_SERVER es un array que contiene información, tales como cabeceras, rutas y localizaciones del código. Las entradas en este array son creadas por el servidor web. No existe garantía que cada servidor web proporcione todas estas entradas, ya que existen servidores que pueden omitir algunas o proporcionar otras que no se encuentran recogidas aquí. Un gran número de estas variables se encuentran recogidas en » especificación CGI 1.1, así que al menos debe esperar encontrar estas entradas.

$HTTP_SERVER_VARS contiene la misma información inicial, pero no es una variable superglobal. (Fijese que $HTTP_SERVER_VARS y $_SERVER son diferentes variables y que por tanto PHP las trata diferente).

Puede encontrar o no los siguientes elementos en $_SERVER. Tenga en cuenta que si ejecuta PHP desde línea de comando pocos o ninguno de los siguientes elementos estarán disponibles (o tendrán algún significado).

PHP_SELF
El nombre del archivo de script ejecutándose actualmente, relativa al directorio raíz de documentos del servidor. Por ejemplo, el valor de $_SERVER[‘PHP_SELF’] en un script ejecutado en la dirección http://example.com/test.php/foo.bar será /test.php/foo.bar. La constante __FILE__ contiene la ruta completa del fichero actual, incluyendo el nombre del archivo. Si PHP se está ejecutando como un proceso de línea de comando, esta variable es el nombre del script desde PHP 4.3.0. En anteriores versiones no estaba disponible.
‘argv’
Array de los argumentos enviados al script. Cuando se ejecuta el script en línea de comando se obtiene acceso a los parámetros de línea de comando con un estilo parecido a como sería en C. Cuando se ejecuta el script mediante el método GET, contendrá la cadena de la consulta.
‘argc’
Contiene el número de parámetros de línea de comando enviados al script (si se ejecuta en línea de comando).
GATEWAY_INTERFACE
Número de revisión de la especificación CGI que está empleando el servidor, por ejemplo ‘CGI/1.1‘.
SERVER_ADDR
La dirección IP del servidor donde se está ejecutando actualmente el script.
SERVER_NAME
El nombre del host del servidor donde se está ejecutando actualmente el script. Si el script se ejecuta en un host virtual se obtendrá el valor del nombre definido para dicho host virtual.
SERVER_SOFTWARE
Cadena de identificación del servidor dada en las cabeceras de respuesta a las peticiones.
SERVER_PROTOCOL
Nombre y número de revisión del protocolo de información a través del cual la página es solicitada, por ejemplo ‘HTTP/1.0‘.
REQUEST_METHOD
Método de petición empleado para acceder a la página, es decir ‘GET‘, ‘HEAD‘, ‘POST‘, ‘PUT‘.

Nota:

El script de PHP se considera terminado después de enviar las cabeceras (es decir después de producir cualquier resultado sin emplear buffers para el resultado) si el método de la petición empleado era HEAD.

REQUEST_TIME
Fecha Unix de inicio de la petición. Disponible desde PHP 5.1.0.
REQUEST_TIME_FLOAT
El timestamp del inicio de la solicitud, con precisión microsegundo. Disponible desde PHP 5.4.0.
QUERY_STRING
Si existe, la cadena de la consulta de la petición de la página.
DOCUMENT_ROOT
El directorio raíz de documentos del servidor en el cual se está ejecutando el script actual, según está definida en el archivo de configuración del servidor.
HTTP_ACCEPT
Contenido de la cabecera Accept: de la petición actual, si existe.
HTTP_ACCEPT_CHARSET
Contenido de la cabecera Accept-Charset: de la petición actual, si existe. Por ejemplo: ‘iso-8859-1,*,utf-8‘.
HTTP_ACCEPT_ENCODING
Contenido de la cabecera Accept-Encoding: de la petición actual, si existe. Por ejemplo: ‘gzip‘.
HTTP_ACCEPT_LANGUAGE
Contenido de la cabecera Accept-Language: de la petición actual, si existe. Por ejemplo: ‘en‘.
HTTP_CONNECTION
Contenido de la cabecera Connection: de la petición actual, si existe. Por ejemplo: ‘Keep-Alive‘.
HTTP_HOST
Contenido de la cabecera Host: de la petición actual, si existe.
HTTP_REFERER
Dirección de la pagina (si la hay) que emplea el agente de usuario para la pagina actual. Es definido por el agente de usuario. No todos los agentes de usuarios lo definen y algunos permiten modificar HTTP_REFERER como parte de su funcionalidad. En resumen, es un valor del que no se puede confiar realmente.
HTTP_USER_AGENT
Contenido de la cabecera User-Agent: de la petición actual, si existe. Consiste en una cadena que indica el agente de usuario empleado para acceder a la pagina. Un ejemplo típico es: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Entre otras opciones, puede emplear dicho valor con get_browser() para personalizar el resultado de la salida de la página en función de las capacidades del agente de usuario empleado.
HTTPS
Ofrece un valor no vacío si el script es pedido mediante el protocolo HTTPS.

Nota: Tenga en cuenta que si se emplea ISAPI con IIS el valor será off si la petición no se ha realizado a través del protocolo HTTPS.

REMOTE_ADDR
La dirección IP desde la cual está viendo la página actual el usuario.
REMOTE_HOST
El nombre del host desde el cual está viendo la página actual el usuario. La obtención inversa del dns está basada en la REMOTE_ADDR del usuario.

 Su servidor web debe estar configurado para crear esta variable. Por ejemplo en Apache necesita que exista HostnameLookups On dentro de httpd.conf. Consulte tambien gethostbyaddr().

REMOTE_PORT
El puerto empleado por la máquina del usuario para comunicarse con el servidor web.
REMOTE_USER
El usuario autenticado.
REDIRECT_REMOTE_USER
El usuario autenticado si la petición es redirigida internamente.
SCRIPT_FILENAME
La ruta del script ejecutándose actualmente en forma absoluta.

Nota:

Si un script se ejecuta mediante CLI como ruta relativa, como por ejemplo file.php o ../file.php, entonces $_SERVER[‘SCRIPT_FILENAME’] contendrá la ruta relativa especificada por el usuario.

SERVER_ADMIN
El valor dado a la directiva SERVER_ADMIN (de Apache) en el archivo de configuración del servidor web. Si el script se está ejecutando en un host virtual, el valor dado será el definido para dicho host virtual.
SERVER_PORT
El puerto de la máquina del servidor usado por el servidor web para la comunicación. Para las configuraciones por omisión, el valor será ‘80‘; el empleo de SSL, por ejemplo, cambiará dicho valor al valor definido para el puerto HTTP seguro.

Nota: Bajo Apache 2, se debe establecer UseCanonicalName = On, así como UseCanonicalPhysicalPort = On para poder obtener el puerto físico (real), de otro modo, este valor podría ser burlado y podría o no devolver el valor del puerto físico. No es seguro confiar en este valor en contextos que requieran seguridad.

SERVER_SIGNATURE
Cadena que contiene la versión del servidor y el nombre del host virtual que son añadidas a las páginas generadas por el servidor, si esta habilitada esta funcionalidad.
PATH_TRANSLATED
Ruta de acceso basada en el sistema (no en el directorio raíz de documentos del servidor) del script actual, después de cualquier mapeo de virtual a real realizada por el servidor.

Nota: A partir de PHP 4.3.2, PATH_TRANSLATED no está definida de forma implícita en el SAPI de Apache 2, en comparación a la situación de Apache 1, donde era necesario establecer el mismo valor que la variable del servidor SCRIPT_FILENAME cuando no era proporcionada por Apache. Este cambio ha sido realizado para cumplir la especificación CGI donde PATH_TRANSLATED sólo debe existir si PATH_INFO esta definida. Los usuarios de Apache 2 pueden emplear AcceptPathInfo = On dentro de httpd.conf para definir PATH_INFO.

SCRIPT_NAME
Contiene la ruta del script actual. Esto es de utilidad para las páginas que necesiten apuntarse a si mismas. La constante __FILE__ contiene la ruta absoluta y el nombre del archivo actual incluido.
REQUEST_URI
La URI que se empleó para acceder a la página. Por ejemplo: ‘/index.html‘.
PHP_AUTH_DIGEST
Cuando se hace autenticación Digest HTTP, esta variable se establece para el encabezado ‘Authorization’ enviado por el cliente (el cual se debe entonces usar para hacer la validación apropiada).
PHP_AUTH_USER
Cuando se hace autenticación HTTP, esta variable se establece para el nombre de usuario provisto por el usuario.
PHP_AUTH_PW
Cuando se hace autenticación HTTP, esta variable se establece para la clave provista por el usuario.
AUTH_TYPE
Cuando se hace autenticado HTTP, está variable se establece para el tipo de autenticación.
PATH_INFO
Contiene cualquier información sobre la ruta proporcionada por el cliente a continuación del nombre del fichero del script actual pero antecediendo a la cadena de la petición, si existe. Por ejemplo, si el script actual se accede a través de la URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, entonces $_SERVER[‘PATH_INFO’] contendrá /some/stuff.
ORIG_PATH_INFO
Versión original de ‘PATH_INFO‘ antes de ser procesado por PHP.
<?php
 echo "PHP_SELF : " . $_SERVER['PHP_SELF'] . "<br />";
 echo "GATEWAY_INTERFACE : " . $_SERVER['GATEWAY_INTERFACE'] . "<br />";
 echo "SERVER_ADDR : " . $_SERVER['SERVER_ADDR'] . "<br />";
 echo "SERVER_NAME : " . $_SERVER['SERVER_NAME'] . "<br />";
 echo "SERVER_SOFTWARE : " . $_SERVER['SERVER_SOFTWARE'] . "<br />";
 echo "SERVER_PROTOCOL : " . $_SERVER['SERVER_PROTOCOL'] . "<br />";
 echo "REQUEST_METHOD : " . $_SERVER['REQUEST_METHOD'] . "<br />";
 echo "REQUEST_TIME : " . $_SERVER['REQUEST_TIME'] . "<br />";
 echo "REQUEST_TIME_FLOAT : " . $_SERVER['REQUEST_TIME_FLOAT'] . "<br />";
 echo "QUERY_STRING : " . $_SERVER['QUERY_STRING'] . "<br />";
 echo "DOCUMENT_ROOT : " . $_SERVER['DOCUMENT_ROOT'] . "<br />";
 echo "HTTP_ACCEPT : " . $_SERVER['HTTP_ACCEPT'] . "<br />";
 echo "HTTP_ACCEPT_CHARSET : " . $_SERVER['HTTP_ACCEPT_CHARSET'] . "<br />";
 echo "HTTP_ACCEPT_ENCODING : " . $_SERVER['HTTP_ACCEPT_ENCODING'] . "<br />";
 echo "HTTP_ACCEPT_LANGUAGE : " . $_SERVER['HTTP_ACCEPT_LANGUAGE'] . "<br />";
 echo "HTTP_CONNECTION : " . $_SERVER['HTTP_CONNECTION'] . "<br />";
 echo "HTTP_HOST : " . $_SERVER['HTTP_HOST'] . "<br />";
 echo "HTTP_REFERER : " . $_SERVER['HTTP_REFERER'] . "<br />";
 echo "HTTP_USER_AGENT : " . $_SERVER['HTTP_USER_AGENT'] . "<br />";
 echo "HTTPS : " . $_SERVER['HTTPS'] . "<br />";
 echo "REMOTE_ADDR : " . $_SERVER['REMOTE_ADDR'] . "<br />";
 echo "REMOTE_HOST : " . $_SERVER['REMOTE_HOST'] . "<br />";
 echo "REMOTE_PORT : " . $_SERVER['REMOTE_PORT'] . "<br />";
 echo "REMOTE_USER : " . $_SERVER['REMOTE_USER'] . "<br />";
 echo "REDIRECT_REMOTE_USER : " . $_SERVER['REDIRECT_REMOTE_USER'] . "<br />";
 echo "SCRIPT_FILENAME : " . $_SERVER['SCRIPT_FILENAME'] . "<br />";
 echo "SERVER_ADMIN : " . $_SERVER['SERVER_ADMIN'] . "<br />";
 echo "SERVER_PORT : " . $_SERVER['SERVER_PORT'] . "<br />";
 echo "SERVER_SIGNATURE : " . $_SERVER['SERVER_SIGNATURE'] . "<br />";
 echo "PATH_TRANSLATED : " . $_SERVER['PATH_TRANSLATED'] . "<br />";
 echo "SCRIPT_NAME : " . $_SERVER['SCRIPT_NAME'] . "<br />";
 echo "REQUEST_URI : " . $_SERVER['REQUEST_URI'] . "<br />";
 echo "PHP_AUTH_DIGEST : " . $_SERVER['PHP_AUTH_DIGEST'] . "<br />";
 echo "PHP_AUTH_USER : " . $_SERVER['PHP_AUTH_USER'] . "<br />";
 echo "PHP_AUTH_PW : " . $_SERVER['PHP_AUTH_PW'] . "<br />";
 echo "AUTH_TYPE : " . $_SERVER['AUTH_TYPE'] . "<br />";
 echo "PATH_INFO : " . $_SERVER['PATH_INFO'] . "<br />";
 echo "ORIG_PATH_INFO : " . $_SERVER['ORIG_PATH_INFO'] . "<br />";
?>

$_GET

(PHP 4 >= 4.1.0, PHP 5)

Descripción

Un array asociativo de variables pasadas vía parámetros por URL.

Ejemplo1 Ejemplo de $_GET

<?php
echo 'Hola ' . htmlspecialchars($_GET["nombre"]) . '!';
?>

Asumiendo que el usuario introdujo http://example.com/?nombre=Juan

El resultado del ejemplo sería algo similar a:

Hola Juan!

$_POST

(PHP 4 >= 4.1.0, PHP 5)

Descripción

Un array asociativo de variables pasadas al script actual a través del método HTTP POST.

Versión Descripción
4.1.0 Se introdujo $_POST y $HTTP_POST_VARS quedó obsoleta.

Ejemplo1 Ejemplo de $_POST

El código

<form action='accion.php' method='post' >
Su nombre: <input type='text' name=nombre > <br />
Su edad: <input type='text' name=edad > <br />
<input type='submit' >
</form>

genera la siguiente salida

Image1

Si suponemos que se introduce, Vicente y 30, entonces

la salida producida será:

Image2

$_FILES

(PHP 4 >= 4.1.0, PHP 5)

Descripción.

Esta variable permite tener acceso a cualquier archivo binario que hayamos enviado en el formulario, esta variable establece algunas propiedades por defecto como

  • name: Es el nombre original del archivo.
  • type:  Es el tipo de archivo, por ejemplo si es un archivo de Word, esto no permite filtrar el tipo de archivo que se puede enviar al servidor.
  • tmp_name: El archivo que se sube se guarda mientras el script se ejecuta en un carpeta temporal y PHP lo renombra con una nombre aleatorio solo para referencia, una vez el script termina el archivo se elimina del servidor, por esta razón debemos, o bien moverlo o copiarlo a otra carpeta, esta propiedad apunta al archivo como tal.
  • error: Si hubira un error al subirlos nos indica que error fue en esta propiedad.
  • size: Nos dice el tamaño del archivo en bytes.
Versión Descripción
4.1.0 Se introdujo $_FILES, haciendo $HTTP_POST_FILES obsoleta.

Esta es una ‘superglobal’ o una variable automatic global. Significa simplemente que es una variable que está disponible en cualquier parte del script. No hace falta hacer global $variable; para acceder a la misma desde funciones o métodos.

 El formulario,

<html>
<head>
<title>Ejercicio $_FILES</title>;
</head>
<body>
<form action='upload0.php' method='post' enctype='multipart/form-data'>
Seleccione el archivo:
<input type='file' name='foto' >
<input type='submit' value='Enviar' >
</form>
</body>
</html>

produce

Image4Si se carga una foto y se envia al script

<html>
<head>
<title>Problema $_FILES</title>
</head>
<body>
<?php
copy($_FILES['foto']['tmp_name'],$_FILES['foto']['name']);
echo 'La foto se registro en el servidor';
$nom=$_FILES['foto']['name'];
echo 'imagen '.$nom;
?>
</body>
</html>

$_REQUEST

(PHP 4 >= 4.1.0, PHP 5)

Descripción.

Un array asociativo que por defecto contiene el contenido de $_GET, $_POST y $_COOKIE.

Versión Descripción
5.3.0 Se introdujo request_order. Esta directiva afecta al contenido de $_REQUEST.
4.3.0 Se eliminó la información $_FILES de $_REQUEST.
4.1.0 Se introdujo $_REQUEST.

Notas.

Esta es una ‘superglobal’ o una variable automatic global. Significa simplemente que es una variable que está disponible en cualquier parte del script. No hace falta hacer global $variable; para acceder a la misma desde funciones o métodos.

Cuando se ejecuta en la línea de comandos , no se incluirán las entradas argv y argc; ya que están presentes en el array $_SERVER

Las variables en $_REQUEST se proporcionan al script a través de los mecanismos de entrada GET, POST, y COOKIE y por lo tanto pueden ser manipulados por el usuario remoto y no debe confiar en el contenido. La presencia y el orden de las variables listadas en este array se definen según la directiva de configuración PHP variables_order.

y así por ejemplo el formulario

<h1>Formulario</h1>
<form action="procesa4.php" method="post">
Nombre <input type="text" name="nombre"> <br />
Apellido <input type="text" name="apellido"> <br />
<input type="submit" value="Aceptar">
</form>

produce la salida

Image11Este script llama a este otro,
<h1>Procesa</h1>
<?
    $nombre = $_REQUEST['nombre'];
    $apellido = $_REQUEST['apellido'];
?>
<h2>Su nombre es <?= $nombre ?></h2>
<h2>Su apellido es <?= $apellido ?></h2>
<h2>$_REQUEST</h2>
<xmp>
<?php print_r($_REQUEST); ?>
</xmp>
<h2>$_POST</h2>
<xmp>
<?php print_r($_POST); ?>
</xmp>
y que a su vez produce la siguiente salida,
Image22

$_ENV

(PHP 4 >= 4.1.0, PHP 5)

$_ENV  — Variables de entorno

Descripción.

Una variable tipo array asociativo de variables pasadas al script actual a través del método del entorno.

Estas variables son importadas en el espacio de nombres global de PHP desde el entorno bajo el que está siendo ejecutado el intérprete PHP. Muchas son entregadas por el intérprete de comandos bajo el que PHP está corriendo y diferentes sistemas suelen tener diferentes tipos de intérpretes de comandos, una lista definitiva es imposible. Por favor consulte la documentación de su intérprete de comandos para una lista de las variables de entorno que se definen.

Otras variables de entorno incluyen las variables CGI, colocadas allí independientemente de que PHP esté siendo ejecutado como módulo del servidor o procesador CGI.


<?php
<table border=0>
foreach ($_ENV as $clave=>$valor)
{
echo $clave." = ".$valor."";
}
</table>
?>

$_SESSION

(PHP 4 >= 4.1.0, PHP 5)

$_SESSION -— Variables de sesión

Descripción.

Es un array asociativo que contiene variables de sesión disponibles para el script actual. Ver la documentación de Funciones de sesión para más información sobre su uso.

Haremos un problema muy sencillo, cargaremos en un formulario el nombre de usuario y clave de un cliente, en la segunda página crearemos dos variables de sesión y en una tercera página recuperaremos los valores almacenados en las variables de sesión.
La primera página es un formulario HTML puro:

<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php" method="post">
Ingrese nombre de usuario:
<input type="text" name="campousuario"><br>
Ingrese clave:
<input type="password" name="campoclave"><br>
<input type="submit" value="confirmar">
</form>
</body>
</html>

La segunda página es donde creamos e inicializamos las dos variables de sesión:

<?php
session_start();
$_SESSION['usuario']=$_REQUEST['campousuario'];
$_SESSION['clave']=$_REQUEST['campoclave'];
?>
<html>
<head>
<title>Problema</title>
</head>
<body>
Se almacenaron dos variables de sesión.<br><br>
<a href="pagina3.php">Ir a la tercer página donde se recuperarán
las variables de sesión</a>
</body>
</html>

Cuando creamos o accedemos al contenido de variables de sesión debemos llamar a la función session_start() antes de cualquier salida de marcas HTML.
La última página de este ejemplo tiene por objetivo acceder a las variables de sesión:


<?php
session_start();
?>
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
echo "Nombre de usuario recuperado de la variable de sesión:".$_SESSION['usuario'];
echo "<br><br>";
echo "La clave recuperada de la variable de sesión:".$_SESSION['clave'];
?>
</body>
</html>

De nuevo vemos que la primera línea de esta página es la llamada a la función session_start() que, entre otras cosas, rescata de un archivo de texto las variables de sesión creadas para ese usuario (recordemos que desde el navegador todas las veces retorna una cookie con la clave que generó PHP la primera vez que llamamos a una página del sitio).
Tengamos en cuenta que en cualquier otra página del sitio tenemos acceso a las variables de sesión sólo con llamar inicialmente a la función session_start().

$_COOKIE

(PHP 4 >= 4.1.0, PHP 5)

$_COOKIE — HTTP Cookies

Description.

Matriz asociativa donde se pasan las HTTP Cookies.

Para crear una cookie que sólo tenga existencia mientras no cerremos la ventana del navegador, pasaremos como fecha de expiración de la cookie, el valor cero. Una vez que la instancia del navegador se cierra, dicha cookie desaparecerá.

Este tipo de cookie puede ser muy útil para validar un usuario en un conjunto de páginas, si previamente ingresó correctamente su nombre de usuario y clave. Es decir, una vez validado el usuario, se verifica en páginas sucesivas si existe la cookie. Una vez que el usuario cierra el navegador, no hay posibilidad

El protocolo HTTP es desconectado. Esto significa que cada vez que solicitamos una página a un servidor representa una conexión distinta.

Una cookie es una pequeña cantidad de datos almacenada por el navegador del usuario cuando solicita una página a un servidor. El que envía que se genere la cookie es el servidor.

Una cookie consta de un nombre, un valor, una fecha de expiración y un servidor. Una cookie está limitada a 4KB.

Luego que una cookie es creada sólo el sitio que la creó puede leerla. Luego de creada una cookie, cada vez que el navegador del usuario visita el sitio, se envía dicha cookie. Otra cosa importante que hay que tener en cuenta es que el usuario del browser puede configurar el mismo para no permitir la creación de cookies, lo que significa que el uso de cookies debe hacerse con moderación y cuando la situación lo requiera. De todos modos, el 95% de los navegadores están configurados para permitir la creación de cookies.
Para la creación de una cookie desde PHP debemos llamar a la función setcookie.

Los parámetros de esta función son:
setcookie( <nombre de la cookie>, <valor de la cookie>, <fecha de expiración>, <carpeta del servidor>)

Con un problema sencillo entenderemos el uso de esta función. Supongamos que queremos que los usuarios que entran a nuestro sitio puedan configurar con qué color de fondo de página quiere que aparezca cada vez que ingresa al sitio. Al color seleccionado por el visitante lo almacenaremos en una cookie. En caso que no exista el color, por defecto es blanco.

La primera página mostrará un formulario con tres controles de tipo radio para la selección del color. También esta página verificará si existe la cookie creada, en caso afirmativo fijará el fondo de la página con el valor de la cookie. Tengamos en cuenta que la primera vez que ejecutemos este programa la página es de color blanco, luego variará según el color seleccionado en el formulario.

El código de la primera página es:

<?php
 if (isset($_COOKIE['color'])) echo " bgcolor=\"$_COOKIE[color]\""
?>
<form action="pagina2.php" method="post">
Seleccione de que color desea que sea la página:
<input type="radio" name="radio" value="rojo" />Rojo
<input type="radio" name="radio" value="verde" />Verde
<input type="radio" name="radio" value="azul" />Azul
<input type="submit" value="Crear cookie" />
</form>

El formulario no varía en nada respecto a otros vistos. Lo más importante es el bloque PHP que verifica si ya existe la cookie en el navegador del cliente. Es importante entender que la primera vez que ejecutemos esta página la cookie no existe, por lo que el if se verifica falso:

<?php
 if (isset($_COOKIE['color'])) echo " bgcolor=\"$_COOKIE[color]\""
?>

El vector asociativo $_COOKIE almacena todas las cookies creadas por el visitante. Si es la primera vez que peticionamos esta página, el vector $_COOKIE no tendrá elementos.
Es decir que la marca body no tiene inicializada la propiedad bgcolor.

La segunda página es la que crea la cookie propiamente dicha:

<?php
 if ($_REQUEST['radio']=="rojo")
   setcookie("color","#ff0000",time()+60*60*24*365,"/");
 elseif ($_REQUEST['radio']=="verde")
   setcookie("color","#00ff00",time()+60*60*24*365,"/");
 elseif ($_REQUEST['radio']=="azul")
   setcookie("color","#0000ff",time()+60*60*24*365,"/");
?>
<a href="pagina1.php">Ir a la otra página</a>

La llamada a la función setcookie debe hacerse antes de imprimir cualquier marca HTML, de lo contrario no funcionará.
Como podemos observar, la creación de la cookie se hace llamando a la función setcookie:

<?php
 if ($_REQUEST['radio']=="rojo")
   setcookie("color","#ff0000",time()+60*60*24*365,"/");
 elseif ($_REQUEST['radio']=="verde")
   setcookie("color","#00ff00",time()+60*60*24*365,"/");
 elseif ($_REQUEST['radio']=="azul")
   setcookie("color","#0000ff",time()+60*60*24*365,"/");
?>

El nombre de la cookie se llama “color” y el valor que almacenamos depende de qué control de tipo radio esté seleccionado en la página anterior. La fecha de expiración de la cookie la calculamos fácilmente llamando a la función time() que nos retorna la fecha actual en segundos y le sumamos el producto 60*60*24*365 (60 segundos * 60 minutos * 24 horas * 365 días) es decir que la cookie existirá en la máquina del visitante hasta el año próximo.

Cuando indicamos como directorio la sintaxis “/” significa que la cookie se crea a nivel del sitio y con cuaquier petición a dicho sitio, el navegador enviará la cookie al servidor.

Por último dispusimos en esta página un hipervínculo a la página anterior, para ver que, de ahora en más, cada vez que ejecutemos la pagina1.php, el color de fondo de la misma dependerá del valor de la cookie registrada.

Anuncios

Tutorial PHP : Introducción a las Variables.

Conceptos básicos En PHP las variables se representan con un signo de dólar seguido por el nombre de la variable. El nombre de la variable es sensible a minúsculas y mayúsculas. Los nombres de variables siguen las mismas reglas que otras etiquetas en PHP. Un nombre de variable válido tiene que empezar con una letra o un carácter de subrayado (underscore), seguido de cualquier número de letras, números y caracteres de subrayado. Como expresión regular se podría expresar como: ‘[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*‘ Para los propósitos de este manual, una letra es a-z, A-Z, y los bytes del 127 al 255 (0x7f-0xff).


<?php
$var = 'Roberto';
$Var = 'Juan';
echo "$var, $Var";      // imprime "Roberto, Juan"

$4site = 'aun no';      // inválido; comienza con un número
$_4site = 'aun no';     // válido; comienza con un carácter de subrayado
$täyte = 'mansikka';    // válido; 'ä' es ASCII (Extendido) 228
?>

De forma predeterminada, las variables siempre se asignan por valor. Esto significa que cuando se asigna una expresión a una variable, el valor completo de la expresión original se copia en la variable de destino. Esto quiere decir que, por ejemplo, después de asignar el valor de una variable a otra, los cambios que se efectúen a una de esas variables no afectará a la otra.

PHP también ofrece otra forma de asignar valores a las variables: asignar por referencia. Esto significa que la nueva variable simplemente referencia (en otras palabras, “se convierte en un alias de” ó “apunta a”) la variable original. Los cambios a la nueva variable afectan a la original, y viceversa.

Para asignar por referencia, simplemente se antepone un signo ampersand (&) al comienzo de la variable cuyo valor se está asignando (la variable fuente). Por ejemplo, el siguiente segmento de código produce la salida ‘Mi nombre es Bob’ dos veces:

<?php
$foo = 'Bob';                // Asigna el valor 'Bob' a $foo
$bar = &$foo;                // Referenciar $foo vía $bar.
$bar = "Mi nombre es $bar";  // Modifica $bar...
echo $bar;
echo $foo;                   // $foo también se modifica.
?>

No es necesario inicializar variables en PHP, sin embargo, es una muy buena práctica. Las variables no inicializadas tienen un valor predeterminado de acuerdo a su tipo dependiendo del contexto en el que son usadas – las booleanas se asumen como FALSE, los enteros y flotantes como cero, las cadenas (p.ej. usadas en echo) se establecen como una cadena vacía y las matrices se convierten en un array vacío.

Tutorial PHP(13d): Fuentes externas.

Formularios HTML (GET y POST)

Cuando se envía un formulario a un script PHP, las variables de dicho formulario pasan a estar automáticamente disponibles en el script gracias a PHP. Por ejemplo, consideremos el siguiente formulario:

Ejemplo #1 Variables de formulario simples

</pre>
<form action="foo.php" method="post">
Nombre usuario: type="text" name="username" />
Email:  <input type="text" name="email" />
<input type="submit" name="submit" value="¡Enviarme!" />
</form>

Dependiendo de su configuración y preferencias personales, existen muchas maneras de acceder a los datos de formularios HTML. Algunos ejemplos:

Ejemplo #2 Acceso a datos de un formulario simple HTML POST

<?php
// Disponible desde PHP 4.1.0

   echo $_POST['username'];
   echo $_REQUEST['username'];

   import_request_variables('p', 'p_');
   echo $p_username;

// Desde PHP 5.0.0, las variables predefinidas largas se pueden
// desactivar con la directiva register_long_arrays.
   echo $HTTP_POST_VARS['username'];

// Disponible si la directiva de PHP register_globals = on. A partir de
// PHP 4.2.0 el valor predeterminado de register_globals = off.
// Usar o depender de este método no es recomendable.

   echo $username;
?>

Usar un formulario GET es similar excepto en el uso de variables predefinidas, que en este caso serán del tipo GET. GET también se usa con QUERY_STRING (la información despues del símbolo ‘?’ en una URL). Por ejemplo http://www.example.com/test.php?id=3 contiene datos GET que son accesibles con $_GET[‘id’]. Vea también $_REQUEST e import_request_variables().

Puntos y espacios en nombres de variable son convertidos a subguiones. Por ejemplo resulta $_REQUEST[“a_b”].

Como hemos dicho, antes de PHP 4.2.0, el valor por omisión de register_globals era on (activado). La comunidad PHP recomienda no confiar en esta directiva ya que es preferible asumir que tiene el valor off (desactivada) y programar teniendo en cuenta esto.

La directiva de configuración magic_quotes_gpc afecta a valores Get, Post y Cookie. Si está activada (on), el valor (It’s “PHP!”) será convertido automáticamente a (It\’s \”PHP!\”). Se consideró que esto era necesario para el escape de caracteres para su inserción en base de datos hace una década, pero actualmente es una característica obsoleta que debe ser desactivada. Ver también addslashes(), stripslashes() y magic_quotes_sybase.

PHP también entiende arrays en el contexto de variables de formularios. Se puede, por ejemplo, agrupar juntas variables relacionadas o usar esta característica para obtener valores de una entrada “select” múltiple. Por ejemplo, vamos a mandar un formulario a sí mismo y a presentar los datos cuando se reciban:

Ejemplo #3 Variables de formulario más complejas

<?php
if ($_POST) {
    echo '<pre>';
    echo htmlspecialchars(print_r($_POST, true));
    echo '</pre>';
}
?>
<form action="" method="post">
Nombre:  <input type="text" name="personal[nombre]" />
Email:   <input type="text" name="personal[email]" />
Cerveza: <br />
<select multiple name="cerveza[]"></select>
value="Cruzcampo">Cruzcampo
value="Águila">Aguila
value="San Miguel">San Miguel
    </select><br />
    <input type="submit" value="¡enviarme!" />
</form>

Nombres de variables tipo IMAGE SUBMIT

Cuando se envía un formulario, es posible usar una imagen en vez del botón estándar “submit”:

Cuando el usuario hace click en cualquier parte de la imagen, el formulario que la acompaña se transmitirá al servidor con dos variables adicionales, sub_x y sub_y. Éstas contienen las coordenadas del clic del usuario dentro de la imagen. Los más experimentados puede notar que los nombres de variable enviados por el navegador contienen un guión en vez de un subrayado (guión bajo), pero PHP convierte el guión en subrayado automáticamente.

Cookies HTTP

PHP soporta cookies de HTTP de forma transparente tal y como están definidas en » RFC 6265. Las cookies son un mecanismo para almacenar datos en el navegador y así rastrear o identificar a usuarios que vuelven. Se pueden crear cookies usando la función setcookie(). Las cookies son parte de la cabecera HTTP, así que se debe llamar a la función SetCookie antes de que se envíe cualquier salida al navegador. Es la misma restricción que para la función header(). Los datos de una cookie están disponibles en el array con datos de cookies apropiada, tal como $_COOKIE, $HTTP_COOKIE_VARS y también en $_REQUEST. Vea la función setcookie() para más detalles y ejemplos.

Si se quieren asignar múltiples valores a una sola cookie, basta con asignarlo como un array. Por ejemplo:

<?php
  setcookie("MiCookie[foo]", 'Prueba 1', time()+3600);
  setcookie("MiCookie[bar]", 'Prueba 2', time()+3600);
?>

Esto creará dos cookies separadas aunque MiCookie será un array simple en el script. Si se quiere definir una sola cookie con valores múltiples, considere el uso de la función serialize() o explode() primero en el valor.

Nótese que una cookie reemplazará a una cookie anterior que tuviese el mismo nombre en el navegador a menos que la ruta o el dominio fuesen diferentes. Así, para una aplicación de carrito de compras se podría querer mantener un contador e ir pasándolo. Es decir:

Ejemplo #4 Un ejemplo de setcookie()

<?php
if (isset($_COOKIE['conteo'])) {
    $conteo = $_COOKIE['conteo'] + 1;
} else {
    $conteo = 1;
}
setcookie('conteo', $conteo, time()+3600);
setcookie("Carrito[$conteo]", $item, time()+3600);
?>

Puntos en los nombres de variables de entrada

Típicamente, PHP no altera los nombres de las variables cuando se pasan a un script. Sin embargo, hay que notar que el punto no es un carácter válido en el nombre de una variable PHP. Para conocer la razón, considere el siguiente ejemplo:

[copde language=”php”]

<?php
$varname.ext;  /* nombre de variable inválido */
?>

[/code]

Lo que el intérprete vé es el nombre de una variable $varname, seguido por el operador de concatenación, y seguido por la cadena pura (es decir, una cadena sin entrecomillar que no coincide con ninguna palabra clave o reservada conocida) ‘ext’. Obviamente, no se pretendía que fuese éste el resultado.

Por esta razón, es importante hacer notar que PHP reemplazará automáticamente cualquier punto en los nombres de variables de entrada por guiones bajos (subrayados).

Determinación de los tipos de variables

Dado que PHP determina los tipos de las variables y los convierte (generalmente) según lo necesita, no siempre resulta obvio de qué tipo es una variable dada en un momento concreto. PHP incluye varias funciones que descubren de qué tipo es una variable: una variable: gettype(), is_array(), is_float(), is_int(), is_object(), y is_string(). Vea también el capítulo sobre Tipos.

Tutorial PHP(13c): Variables de variables.

A veces es conveniente tener nombres de variables de variables. Dicho de otro modo, son nombres de variables que se pueden definir y usar dinámicamente. Una variable normal se establece con una sentencia como:

?php
$a='hola';
?>

Una variable variable toma el valor de una variable y lo trata como el nombre de una variable. En el ejemplo anterior, hola, se puede usar como el nombre de una variable utilizando dos signos de dólar. Es decir:

<?php
$$a = 'mundo';
?>

En este momento se han definido y almacenado dos variables en el árbol de símbolos de PHP: $a, que contiene “hola”, y $hola, que contiene “mundo”. Es más, esta sentencia:

<?php
echo "$a ${$a}";
?>

produce el mismo resultado que:

<?php
echo "$a $hola";
?>

esto quiere decir que ambas producen el resultado: hola mundo. Para usar variables de variables con matrices, hay que resolver un problema de ambigüedad. Si se escribe $$a[1] el intérprete necesita saber si nos referimos a utilizar $a[1] como una variable, o si se pretendía utilizar $$a como variable y el índice [1] como índice de dicha variable. La sintaxis para resolver esta ambigüedad es: ${$a[1]} para el primer caso y ${$a}[1] para el segundo.

También se puede acceder a las propiedades de la clase usando el nombre de la variable de la propiedad. El nombre de la propiedad será resuelto según donde se hizo la llamada. Por ejemplo, en esta expresión $foo->$bar, de forma local en la clase se buscará por $bar y su valor será usado como el nombre de la propiedad de $foo. Esto también es cierto si $bar es un acceso a un array. También se pueden usar llaves para delimitar de forma clara el nombre de la propiedad.

Tenga en cuenta que las variables de variables no pueden usarse con las Matrices superglobales de PHP en el interior de funciones o métodos de clase. La variable $this es también una variable especial que no puede ser referenciada dinámicamente.

Tutorial PHP(13b): Variables PHP predefinidas.

PHP proporciona una gran cantidad de variables predefinidas a cualquier script que se ejecute. Muchas de éstas, sin embargo, no pueden ser completamente documentadas ya que dependen del servidor que esté corriendo, la versión y configuración de dicho servidor, y otros factores. Algunas de estas variables no estarán disponibles cuando se ejecute PHP desde la línea de comandos. Para obtener una lista de estas variables, por favor vea la sección sobre Variables Predefinidas Reservadas.

AdvertenciaA partir de PHP 4.2.0, el valor predeterminado de la directiva PHP register_globals es off (desactivada). Este es un cambio importante en PHP. Tener register_globals off afecta el conjunto de variables predefinidas disponibles en el sistema. Por ejemplo, para obtener DOCUMENT_ROOT se usará $_SERVER[‘DOCUMENT_ROOT’] en vez de $DOCUMENT_ROOT ó $_GET[‘id’] de la URL http://www.example.com/test.php?id=3 en lugar de $id ó $_ENV[‘HOME’] en lugar de $HOME.

Para más información sobre este cambio, puede consultar el apartado de configuración sobre register_globals, el capítulo sobre seguridad Usando “Register Globals” , asi como los anuncios de lanzamiento de PHP » 4.1.0 y » 4.2.0

El uso de las variables reservadas predefinidas en PHP, como las matrices superglobales es recomendable.

A partir de PHP 4.1.0, PHP ofrece un conjunto adicional de matrices predefinidas que contienen variables del servidor web, el entorno y entradas del usuario. Estas nuevas matrices son un poco especiales porque son automáticamente globales. Por esta razón, son conocidas a menudo como “superglobales”. Las superglobales se mencionan más abajo; sin embargo para una lista de sus contenidos y más información sobre variables predefinidas en PHP, por favor consulte la sección Variables predefinidas reservadas. Asimismo, podrá notar cómo las antiguas variables predefinidas ($HTTP_*_VARS) todavía existen. A partir de PHP 5.0.0, los arrays de variables predefinidas de tipo long de PHP se pueden desactivar con la directiva register_long_arrays .

Nota: Variables variables

Las superglobales no pueden ser usadas como variables variables al interior de funciones o métodos de clase.

Nota:

Aún cuando las superglobales y HTTP_*_VARS pueden existir al mismo tiempo; estas variables no son idénticas, así que modificar una no cambia la otra.

Si ciertas variables no son definidas en variables_order, las matrices PHP predefinidas asociadas a estas, estarán vacías.

Tutorial PHP(13a): ámbito de las variables.

El ámbito de una variable es el contexto dentro del que la variable está definida. La mayor parte de las variables PHP sólo tienen un ámbito simple. Este ámbito simple también abarca los ficheros incluídos y los requeridos. Por ejemplo:

<?php
$a = 1;
include 'b.inc';
?>

Aquí, la variable $a estará disponible al interior del script incluido b.inc. Sin embargo, al interior de las funciones definidas por el usuario se introduce un ámbito local a la función. Cualquier variable usada dentro de una función está, por omisión, limitada al ámbito local de la función. Por ejemplo:

<?php
$a = 1; /* ámbito global */
function test()
{
echo $a; /* referencia a una variable del ámbito local */
}

test();
?>

Este script no producirá salida, ya que la sentencia echo utiliza una versión local de la variable $a, a la que no se ha asignado ningún valor en su ámbito. Puede que usted note que hay una pequeña diferencia con el lenguaje C, en el que las variables globales están disponibles automáticamente dentro de la función a menos que sean expresamente sobreescritas por una definición local. Esto puede causar algunos problemas, ya que la gente puede cambiar variables globales inadvertidamente. En PHP, las variables globales deben ser declaradas globales dentro de la función si van a ser utilizadas dentro de dicha función.

La palabra clave global

En primer lugar, un ejemplo de uso de global:

Ejemplo #1 Uso de global

<?php
$a = 1;
$b = 2;

function Suma()
{
global $a, $b;

$b = $a + $b;
}

Suma();
echo $b;
?>

El script anterior producirá la salida 3. Al declarar $a y $b globales dentro de la función, todas las referencias a tales variables se referirán a la versión global. No hay límite al número de variables globales que se pueden manipular dentro de una función.

Un segundo método para acceder a las variables desde un ámbito global es usando el array $GLOBALS. El ejemplo anterior se puede reescribir así:

Ejemplo #2 Uso de $GLOBALS en lugar de global

<?php
$a = 1;
$b = 2;

function Suma()
{
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

Suma();
echo $b;
?>

El array $GLOBALS es un array asociativo con el nombre de la variable global como clave y los contenidos de dicha variable como el valor del elemento del array. $GLOBALS existe en cualquier ámbito, esto ocurre ya que $GLOBALS es una superglobal. Aquí hay un ejemplo que demuestra el poder de las superglobales:

Ejemplo #3 Ejemplo que demuestra las superglobales y el ámbito

<?php
function test_global()
{
// La mayoría de variables predefinidas no son "super" y requieren
// 'global' para estar disponibles al ámbito local de las funciones.
global $HTTP_POST_VARS;

echo $HTTP_POST_VARS['name'];

// Las superglobales están disponibles en cualquier ámbito y no
// requieren 'global'. Las superglobales están disponibles desde
// PHP 4.1.0, y ahora HTTP_POST_VARS se considera obsoleta.
echo $_POST['name'];
}
?>

Utilizar una clave global fuera de una función no es un error. Esta puede ser utilizada aún si el fichero está incluido desde el interior de una función.

Uso de variables static

Otra característica importante del ámbito de las variables es la variable estática. Una variable estática existe sólo en el ámbito local de la función, pero no pierde su valor cuando la ejecución del programa abandona este ámbito. Consideremos el siguiente ejemplo:

Ejemplo #4 Ejemplo que demuestra la necesidad de variables estáticas

<?php
function test()
{
$a = 0;
echo $a;
$a++;
}
?>

Esta función tiene poca utilidad ya que cada vez que es llamada asigna a $a el valor 0 e imprime un 0. La sentencia $a++, que incrementa la variable, no sirve para nada, ya que en cuanto la función finaliza, la variable $a desaparece. Para hacer una función útil para contar, que no pierda la pista del valor actual del conteo, la variable $a debe declararse como estática:

Ejemplo #5 Ejemplo del uso de variables estáticas

<?php
function test()
{
static $a = 0;
echo $a;
$a++;
}
?>

Ahora, $a se inicializa únicamente en la primera llamada a la función, y cada vez que la función test() es llamada, imprimirá el valor de $a y lo incrementa.

Las variables estáticas también proporcionan una forma de manejar funciones recursivas. Una función recursiva es la que se llama a sí misma. Se debe tener cuidado al escribir una función recursiva, ya que puede ocurrir que se llame a sí misma indefinidamente. Hay que asegurarse de implementar una forma adecuada de terminar la recursión. La siguiente función cuenta recursivamente hasta 10, usando la variable estática $count para saber cuándo parar:

Ejemplo #6 Variables estáticas con funciones recursivas

<?php

function test()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
test();
}
$count--;
}
?>

Las variables estáticas pueden ser declaradas como se ha visto en los ejemplos anteriores. Al tratar de asignar valores a estas variables que sean el resultado de expresiones, causará un error de análisis sintáctico.

Ejemplo #7 Declaración de variables estáticas

<?php
function foo(){
static $int = 0;          // correcto
static $int = 1+2;        // incorrecto  (ya que es una expresión)
static $int = sqrt(121);  // incorrecto  (es una expresión también)

$int++;
echo $int;
}
?>

Las declaraciones estáticas son resueltas en tiempo de compilación.

Utilizar una clave global fuera de una función no es un error. Esta pueda ser utilizada aún si el fichero está incluido en el interior de una función.

Referencias con variables global y static.

El motor Zend 1, utilizado por PHP 4, implementa los modificadores static y global para variables en términos de referencias. Por ejemplo, una variable global verdadera importada dentro del ámbito de una función con global crea una referencia a la variable global. Esto puede ser causa de un comportamiento inesperado, tal y como podemos comprobar en el siguiente ejemplo:

<?php
function prueba_referencia_global() {
global $obj;
$obj = &new stdclass;
}

function prueba_no_referencia_global() {
global $obj;
$obj = new stdclass;
}

prueba_referencia_global();
var_dump($obj);
prueba_no_referencia_global();
var_dump($obj);
?>

El resultado del ejemplo sería:

NULL
object(stdClass)(0) {
}

Un comportamiento similar se aplica a static. Las referencias no son almacenadas estáticamente.

<?php
function &obtener_instancia_ref() {
static $obj;

echo 'Objeto estático: ';
var_dump($obj);
if (!isset($obj)) {
// Asignar una referencia a la variable estática
$obj = &new stdclass;
}
$obj->property++;
return $obj;
}

function &obtener_instancia_no_ref() {
static $obj;

echo 'Objeto estático: ';
var_dump($obj);
if (!isset($obj)) {
// Asignar el objeto a la variable estática
$obj = new stdclass;
}
$obj->property++;
return $obj;
}

$obj1 = obtener_instancia_ref();
$aun_obj1 = obtener_instancia_ref();
echo "\n";
$obj2 = obtener_instancia_no_ref();
$aun_obj2 = obtener_instancia_no_ref();
?>

El resultado del ejemplo sería:

Objeto estático: NULL
Objeto estático: NULL

Objeto estático: NULL
Objeto estático: object(stdClass)(1) {
[“property”]=>
int(1)
}

Este ejemplo demuestra que al asignar una referencia a una variable estática, esta no es recordada cuando se invoca la funcion &obtener_instancia_ref() por segunda vez.

Tutorial PHP(13): Variables PHP.

En PHP las variables se representan con un signo de dólar seguido por el nombre de la variable. El nombre de la variable es sensible a minúsculas y mayúsculas.

Los nombres de variables siguen las mismas reglas que otras etiquetas en PHP. Un nombre de variable válido tiene que empezar con una letra o un carácter de subrayado (underscore), seguido de cualquier número de letras, números y caracteres de subrayado. Como expresión regular se podría expresar como: ‘[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

Nota: Para los propósitos de este manual, una letra es a-z, A-Z, y los bytes del 127 al 255 (0x7f-0xff).

Nota: $this es una variable especial que no puede ser asignada.

Para más información sobre funciones relacionadas con variables, vea la Referencia de Funciones de Variables.

<?php
$var = 'Roberto';
$Var = 'Juan';
echo "$var, $Var";      // imprime "Roberto, Juan"

$4site = 'aun no';      // inválido; comienza con un número
$_4site = 'aun no';     // válido; comienza con un carácter de subrayado
$täyte = 'mansikka';    // válido; 'ä' es ASCII (Extendido) 228
?>

De forma predeterminada, las variables siempre se asignan por valor. Esto significa que cuando se asigna una expresión a una variable, el valor completo de la expresión original se copia en la variable de destino. Esto quiere decir que, por ejemplo, después de asignar el valor de una variable a otra, los cambios que se efectúen a una de esas variables no afectará a la otra. Para más información sobre este tipo de asignación, vea Expresiones.

PHP también ofrece otra forma de asignar valores a las variables: asignar por referencia. Esto significa que la nueva variable simplemente referencia (en otras palabras, “se convierte en un alias de” ó “apunta a”) la variable original. Los cambios a la nueva variable afectan a la original, y viceversa.

Para asignar por referencia, simplemente se antepone un signo ampersand (&) al comienzo de la variable cuyo valor se está asignando (la variable fuente). Por ejemplo, el siguiente segmento de código produce la salida ‘Mi nombre es Bob‘ dos veces:

<?php
$foo = 'Bob';                // Asigna el valor 'Bob' a $foo
$bar = &$foo;                // Referenciar $foo vía $bar.
$bar = "Mi nombre es $bar";  // Modifica $bar...
echo $bar;
echo $foo;                   // $foo también se modifica.
?>

 

Algo importante a tener en cuenta es que sólo las variables con nombre pueden ser asignadas por referencia.

<?php
$foo = 25;
$bar = &$foo;      // Esta es una asignación válida.
$bar = &(24 * 7);  // Inválida; referencia una expresión sin nombre.

function test()
{
return 25;
}

$bar = &test();    // Inválido.
?>

No es necesario inicializar variables en PHP, sin embargo, es una muy buena práctica. Las variables no inicializadas tienen un valor predeterminado de acuerdo a su tipo dependiendo del contexto en el que son usadas – las booleanas se asumen como FALSE, los enteros y flotantes como cero, las cadenas (p.ej. usadas en echo) se establecen como una cadena vacía y las matrices se convierten en un array vacío.

Ejemplo #1 Valores predeterminados en variables sin inicializar

<?php
// Una variable no definida Y no referenciada (sin contexto de uso); imprime NULL
var_dump($variable_indefinida);

// Uso booleano; imprime 'false' (Vea operadores ternarios para más información sobre esta sintaxis)
echo($booleano_indefinido ? "true\n" : "false\n");

// Uso de una cadena; imprime 'string(3) "abc"'
$cadena_indefinida .= 'abc';
var_dump($cadena_indefinida);

// Uso de un entero; imprime 'int(25)'
$int_indefinido += 25; // 0 + 25 => 25
var_dump($int_indefinido);

// Uso de flotante/doble; imprime 'float(1.25)'
$flotante_indefinido += 1.25;
var_dump($flotante_indefinido);

// Uso de array; imprime array(1) {  [3]=>  string(3) "def" }
$array_indefinida[3] = "def"; // array() + array(3 => "def") => array(3 => "def")
var_dump($array_indefinida);

// Uso de objetos; crea un nuevo objeto stdClass (vea http://www.php.net/manual/en/reserved.classes.php)
// Imprime: object(stdClass)#1 (1) {  ["foo"]=>  string(3) "bar" }
$objeto_indefinido->foo = 'bar';
var_dump($objeto_indefinido);
?>

 

Depender del valor predeterminado de una variable sin inicializar es problemático al incluir un archivo en otro que use el mismo nombre de variable. También es un importante riesgo de seguridad cuando la opción register_globals se encuentra habilitada. Un error de nivel E_NOTICE es emitido cuendo se trabaja con variables sin inicializar, con la excepción del caso en el que se anexan elementos a un array no inicializado. La construcción del lenguaje isset() puede ser usada para detectar si una variable ya ha sido inicializada.