Report a bug - Anjus Software

Anuncio
Referencias Explicadas
¿Qué son las Referencias?
Las Referencias en PHP son medios de acceder al mismo contenido de una variable mediante
diferentes nombres. No son como los punteros de C; por ejemplo, no se puede realizar aritmética de
punteros con ellas, realmente no son direcciones de memoria, etc. Véase ¿Qué NO son las
Referencias? para más información. Las referencias son alias de la tabla de símbolos. Observe que en
PHP el nombre de la variable y el contenido de la variable son cosas diferentes, por lo que el mismo
contenido puede tener diferentes nombres. La analogía más próxima es con los archivos y los
nombres de archivos de Unix - los nombres de variables son entradas de directorio, mientras que el
contenido de las variables es el archivo en sí. Las referencias se pueden vincular a enlaces duros en
sistemas de archivos Unix.
¿Qué hacen las referencias?
Hay tres operaciones básicas que se realizan usando referencias: asignar por referencia, pasar por
referencia, y devolver por referencia. En esta sección se dará una introducción a estas operaciones,
con enlaces para una lectura complementaria.
Asignar por Referencia
En la primera de estas operaciones, las referencias de PHP permiten hacer que dos variables hagan
referencia al mismo contenido. Es decir, cuando se hace:
<?php
$a =& $b;
?>
significa que $a y $b apuntan al mismo contenido.
Nota:
$a y $b aquí son completamente iguales. $a no está apuntando a $b o viceversa. $a y $b están
apuntando al mismo lugar.
Nota:
Si se asigna, pasa, o devuelve una variable no definida por referencia, la variable se creará.
Ejemplo #1 Usar referencias con variables no definidas
<?php
function foo(&$var) { }
foo($a); // $a es "creada" y asignada a null
$b = array();
foo($b['b']);
var_dump(array_key_exists('b', $b)); // bool(true)
$c = new StdClass;
foo($c->d);
var_dump(property_exists($c, 'd')); // bool(true)
?>
Se puede usar la misma sintaxis con funciones que devuelven referencias y con el
operador new (desde PHP 4.0.4 y anterior a PHP 5.0.0):
<?php
$foo =& find_var($bar);
?>
Desde PHP 5, new devuelve una referencia automáticamente, por lo que usar =& en este contexto es
obsoleto y produce un mensaje E_DEPRECATED en PHP 5.3 y posteriores, y un mensaje E_STRICT en
versiones anteriores. (Técnicamente, la diferencia es que, en PHP 5, las variables de objetos, como
los recursos, son meros punteros a la información del objeto actual, por lo que estas referencias a
objetos no son "referencias" en el mismo sentido usado antes (alias). Para más información,
véase Objetos y referencias.)
Advertencia
Si se asigna una referencia a una varible declarada global dentro de una función, la referencia será
visible sólo dentro de la función. Se puede evitar esto usando la matriz $GLOBALS.
Ejemplo #2 Refenciar variables globales dentro de funciones
<?php
$var1 = "Variable de ejemplo";
$var2 = "";
function referencias_globales($usar_globals)
{
global $var1, $var2;
if (!$usar_globals) {
$var2 =& $var1; // visible sólo dentro de la función
} else {
$GLOBALS["var2"] =& $var1; // visible también en el contexto global
}
}
referencias_globales(false);
echo "var2 está establecida a '$var2'\n"; // var2 está establecida a ''
referencias_globales(true);
echo "var2 está establecida a '$var2'\n"; // var2 está establecida a 'Variable de ejemplo'
?>
Piense en global $var; como simplificación de $var =& $GLOBALS['var'];. De este modo, al
asignar otra referencia a $var sólo cambia la referencia de la variable local.
Nota:
Si se asigna un valor a una variable con referencias en una sentencia foreach, también se modifican
las referencias.
Ejemplo #3 Referencias y la sentencia foreach
<?php
$ref = 0;
$fila =& $ref;
foreach (array(1, 2, 3) as $fila) {
// hacer algo
}
echo $ref; // 3 - último elemento de la matriz iterada
?>
Mientras que no sea estrictamente una asignación por referencia, las expresiones creadas con el
constructor de lenguaje array() también pueden comportarse como tales prefijando & al elemento
del array a añadir. Ejemplo:
<?php
$a = 1;
$b = array(2, 3);
$arr = array(&$a, &$b[0], &$b[1]);
$arr[0]++; $arr[1]++; $arr[2]++;
/* $a == 2, $b == array(3, 4); */
?>
Observe, sin embargo, que las referencias dentro de arrays son potencialmente peligrosas. Realizar
una asignación normal (no por referencia) con una referencia en el lado derecho no convierte el lado
izquierdo en una referencia, pero las referencias dentro de arrays son conservadas en estas
asignaciones normales. Esto también se aplica a las llamadas a funciones donde el array es pasado
por valor. Ejemplo:
<?php
/* Asignación de variables escalares */
$a = 1;
$b =& $a;
$c = $b;
$c = 7; //$c no es una referencia; no cambia $a o $b
/* Asignación de variables de array */
$arr = array(1);
$a =& $arr[0]; // $a y $arr[0] son el mismo conjunto de referencias
$arr2 = $arr; // ¡no es una asignación por referencia!
$arr2[0]++;
/* $a == 2, $arr == array(2) */
/* ¡El contenido de $arr se cambia incluso si no es una referencia! */
?>
En otras palabras, el comportamiento de las referencias de arrays está definido en una base
elemento-por-elemento; el comportamiento de las referencias de elementos individuales está
desasociado del estado de la referencia del array contenedor.
Pasar por Referencia
Lo segundo que hacen las referencias es pasar variables por referencia. Esto se lleva a cabo haciendo
que una variable local en una función y una variable en el ámbito de la llamada referencien al mismo
contenido. Ejemplo:
<?php
function foo(&$var)
{
$var++;
}
$a=5;
foo($a);
?>
hará que $a sea 6. Esto sucede porque en la función foo la variable $var hace referencia al mismo
contenido que $a. Para más información sobre esto, lea la sección pasar por referencia.
Devolver por Referencia
Lo tercero que hacen las referncias es devolver por referencia.
¿Qué NO son las Referencias?
Como se dijo antes, las referencias no son punteros. Es decir, la siguiente construcción no hará lo
que se esperaba:
<?php
function foo(&$var)
{
$var =& $GLOBALS["baz"];
}
foo($bar);
?>
Lo que sucede es que $var en foo será ligada con $bar en la llamada, pero entonces será religada
con $GLOBALS["baz"]. No hay forma de ligar $bar en el ámbito de la llamada a otra cosa usando el
mecanismo de referencia, ya que $bar no está disponible en la función foo (está representada
por $var, pero $varsólo tiene el contenido de la variable y no la vinculación nombre-a-valor en la
tabla de símbolos de llamada). Se puede usar devolver referencias para referencias variables
seleccionadas por la función.
Pasar por Referencia
Se puede pasar una variable por referencia a una función y así hacer que la función pueda modificar
la variable. La sintaxis es la siguiente:
<?php
function foo(&$var)
{
$var++;
}
$a=5;
foo($a);
// $a es 6 aquí
?>
Nota: No existe ningún signo de referencia en una llamada a una función - sólo en la definición de la
función. Las definiciones de funciones por sí solas son suficientes para pasar correctamente el
argumento por referencia. A partir de PHP 5.3.0, se obtendrá una advertencia diciendo que "call-time
pass-by-reference" (pasar por referencia en tiempo de llamada) está obsoleto cuando se use &
en foo(&$a);. A partir de PHP 5.4.0, el paso por referencia en tiempo de llamada ha sido eliminado,
por lo que su uso emitirá un error fatal.
Se puede pasar por referencia lo siguiente:



Variables, esto es, foo($a)
Nuevas declaraciones, esto es, foo(new foobar())
Referencias devueltas desde funciones, esto es:
<?php
function foo(&$var)
{
$var++;
}
function &bar()
{
$a = 5;
return $a;
}
foo(bar());
?>
Vea más sobre devolver por referencia.
Ninguna otra expresión debería pasarse por referencia, ya que el resultado no está definido. Por
ejemplo, los siguientes ejemplos de pasar por referencia no son válidos:
<?php
function foo(&$var)
{
$var++;
}
function bar() // Observe que falta el &
{
$a = 5;
return $a;
}
foo(bar()); // Produce un error fatal a partir de PHP 5.0.5
foo($a = 5); // Expresión, no una variable
foo(5); // Produce un error fatal
?>
Estos requerimientos son para PHP 4.0.4 y posterior.
Devolver Referencias
Devolver por referencia es útil cuando se quiere usar una función para encontrar a qué variable
debería estar vinculada una referencia. No use devolver por referencia para aumentar el rendimiento.
El motor optimizará automáticamente esto por sí mismo. Hay que devolver referencias sólo cuando
se tenga una razón técnicamente válida para hacerlo. Para devolver referencias use esta sintaxis:
<?php
class foo {
public $valor = 42;
public function &obtenerValor() {
return $this->valor;
}
}
$obj = new foo;
$miValor = &$obj->obtenerValor(); // $miValor es una referencia a $obj->valor, que es 42.
$obj->valor = 2;
echo $miValor;
// imprime el nuevo valor de $obj->valor, esto es, 2.
?>
En este ejemplo, la propiedad del objeto devuelto por la función obtenerValor debería estar
establecida, no la copia, como si estuviera sin usar la sintaxis de referencia.
Nota: A diferencia de pasar un parámetro, aquí se tiene que usar & en ambos lugares - para indicar
que se quiere devolver por referencia, no una copia, y para indicar que la vinculación por referencia,
en vez de la asignación normal, debería ser hecha para $miValor.
Nota: Si se intenta devolver una referencia desde una función con la sintaxis: return ($this>valor);, no funcionará ya que se está intentando devolver el resultado de una expresión, y no de
una variable, por referencia. Sólo se puede devolver variables por referencia desde una función nada más. Desde PHP 4.4.0 en la rama PHP 4, y PHP 5.1.0 en la rama PHP 5, se emite un
error E_NOTICE si el código intenta devolver una expresión dinámica o un resultado del operador new.
Para usar la referencia retornada, se debe usar la asignación por referencia:
<?php
function &collector() {
static $collection = array();
return $collection;
}
$collection = &collector();
$collection[] = 'foo';
?>
Para pasar la referencia retornada a otra función que espera una referencia se puede usar la
siguiente sintaxis:
<?php
function &collector() {
static $collection = array();
return $collection;
}
array_push(collector(), 'foo');
?>
Nota: Observe que array_push(&collector(), 'foo'); no funcionará, resultará en un error fatal.
Destruir Referencias
Cuando se destruye una referencia, se rompe el vínculo entre el nombre de la variable y el contenido
de la variable. Esto no significa que el contenido de la variable sea destruida. Por ejemplo:
<?php
$a = 1;
$b =& $a;
unset($a);
?>
no destruirá $b, sólo $a.
De nuevo, podría ser útil pensar en esto como análogo a una llamada a unlink de Unix.
Ubicar las Referencias
Muchas construcciones sintácticas de PHP están implementadas mediante el mecanismo de
referencia, por lo que todo lo mencionado aquí sobre la vinculación de referencias también se aplica a
estas construcciones. Algunas construcciones, como pasar y devolver por referencia, han sido
mencionadas antes. Otras construcciones que usan referencias son:
Referencias globales
Cuando se declara una variable como global $var, de hecho se está creando una referencia a una
variable global. Es decir, esto es lo mismo que:
<?php
$var =& $GLOBALS["var"];
?>
Esto también significa que al destruir $var no se destruirá la variable global.
$this
En un método de un objeto, $this es siempre una referencia al objeto que realiza la llamada.
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.
Véase también la pregunta frecuente titulada "¿Cómo me afecta register_globals?"
Superglobals
Superglobals — Superglobals son variables internas que están disponibles siempre en todos los
ámbitos
Report a bug
Descripción
Algunas variables predefinidas en PHP son "superglobales", lo que significa que están disponibles en
todos los ámbitos a lo largo del script. 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
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
Report a bug
Historial de cambios
Versión
4.1.0
Descripción
Las superglobals son añadidas a
PHP.
Report a bug
Notas
Nota: Disponibilidad de variables
Por defecto, todas las superglobals están disponibles pero hay directivas que afectan a su
disponibilidad. Para más información, véase la documentacion de variables_order.
Nota: Tratando con register_globals
Si la directiva obsoleta register_globals tiene el valor on entonces las variables están tambien
disponibles en el ámbito global del código. Por ejemplo, $_POST['foo'] tambien existirá como $foo.
Para información relacionada, consulte el FAQ titulado "¿Cómo puede afectarme register_globals?"
Nota: Variables variables
Las variables superglobals no pueden ser usadas como variables variables dentro de funciones o
métodos de clase.
Report a bug
Ver también



ámbito de las variables
La directiva variables_order
La extensión filter
$GLOBALS
(PHP 4, PHP 5)
$GLOBALS — Hace referencia a todas las variables disponibles en el ámbito global
Report a bug
Descripción
Es un array asociativo que contiene las referencias a todas la variables que están definidas en el
ámbito global del script. Los nombres de las variables son las claves del array.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de $GLOBALS
<?php
function test() {
$foo = "variable local";
echo '$foo en el ámbito global: ' . $GLOBALS["foo"] . "\n";
echo '$foo en el ámbito simple: ' . $foo . "\n";
}
$foo = "Contenido de ejemplo";
test();
?>
El resultado del ejemplo sería algo similar a:
$foo en el ámbito global: Contenido de ejemplo
$foo en el ámbito simple: variable local
Report a bug
Notas
Nota:
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.
Nota: Disponibilidad de las variables
A diferencia de todas las otras superglobals, $GLOBALS ha estado esencialmente siempre disponible
en PHP.
$_SERVER
$HTTP_SERVER_VARS [obsoleto]
(PHP 4 >= 4.1.0, PHP 5)
$_SERVER -- $HTTP_SERVER_VARS [obsoleto] — Información del entorno del servidor y de ejecución
Report a bug
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).
Report a bug
Índices
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: 'iso8859-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: 'KeepAlive'.
'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 conget_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.
Nota: 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.
'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
definirPATH_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
URLhttp://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.
Historial de cambios
Versión
4.1.0
Descripción
Se introdujo $_SERVER que
deprecaba $HTTP_SERVER_VARS.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de $_SERVER
<?php
echo $_SERVER['SERVER_NAME'];
?>
El resultado del ejemplo sería algo similar a:
www.example.com
Report a bug
Notas
Nota:
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.
Report a bug
Ver también

Filtrado de datos
$_GET
$HTTP_GET_VARS [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_GET -- $HTTP_GET_VARS [obsoleta] — Variables HTTP GET
Report a bug
Descripción
Un array asociativo de variables pasado al script actual vía parámetros URL.
$HTTP_GET_VARS contiene la misma información, pero no es una superglobal. (Note
que $HTTP_GET_VARS y $_GET son diferentes variables y que PHP los usa de forma diferente)
Report a bug
Historial de cambios
Versión
4.1.0
Descripción
Se introduzco $_GET y $HTTP_GET_VARS quedó
obsoleto.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de $_GET
<?php
echo 'Hola ' . htmlspecialchars($_GET["nombre"]) . '!';
?>
Asumiendo que el usuario introduzco http://example.com/?nombre=Hannes
El resultado del ejemplo sería algo similar a:
Hola Hannes!
Report a bug
Notas
Nota:
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.
Nota:
Las variables GET son pasadas vía urldecode().
Report a bug
Ver también


Manejo de variables externas
La extensión filter
$_POST
$HTTP_POST_VARS [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_POST -- $HTTP_POST_VARS [obsoleta] — Variables HTTP POST
Report a bug
Descripción
Un array asociativo de variables pasadas al script actual a través del método HTTP POST.
$HTTP_POST_VARS contiene la misma información inicial, pero no es una superglobal. (Nótese
que $HTTP_POST_VARS y $_POST son diferentes variables y que PHP las trata de forma distinta)
Report a bug
Historial de cambios
Versión
4.1.0
Descripción
Se introdujo $_POST y $HTTP_POST_VARS quedó
obsoleta.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de $_POST
<?php
echo 'Hola ' . htmlspecialchars($_POST["nombre"]) . '!';
?>
Asumiendo que el usuario envió por el método POST nombre=Juan
El resultado del ejemplo sería algo similar a:
Hola Juan!
Report a bug
Notas
Nota:
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.
Report a bug
Ver también


Tratando con variables externas
La extensión filter
$_FILES
$HTTP_POST_FILES [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_FILES -- $HTTP_POST_FILES [obsoleta] — Variables de Carga de Archivos HTTP
Report a bug
Descripción
Una variable tipo array asociativo de elementos cargados al script actual a través del método POST.
$HTTP_POST_FILES contiene la misma información inicial, pero no es una superglobal. (Note
que $HTTP_POST_FILES y $_FILES son variables diferentes y que PHP las trata como tal)
Report a bug
Historial de cambios
Versión
4.1.0
Descripción
Se introdujo $_FILES,
haciendo $HTTP_POST_FILES obsoleta.
Report a bug
Notas
Nota:
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.
Report a bug
Ver también


move_uploaded_file() - Mueve un archivo subido a una nueva ubicación
Gestión de Carga de Archivos
$_REQUEST
(PHP 4 >= 4.1.0, PHP 5)
$_REQUEST — Variables HTTP Request
Report a bug
Descripción
Un array asociativo que por defecto contiene el contenido de $_GET, $_POST y $_COOKIE.
Report a bug
Historial de cambios
Versión
5.3.0
Descripción
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.
Report a bug
Notas
Nota:
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.
Nota:
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
Nota:
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.
Report a bug
Ver también



import_request_variables() - Importar variables GET/POST/Cookie en el ámbito global
Tratando con variables externas
La extensión filter
$_SESSION
$HTTP_SESSION_VARS [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_SESSION -- $HTTP_SESSION_VARS [obsoleta] — Variables de sesión
Report a bug
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.
$HTTP_SESSION_VARS contiene la misma información inicial pero no es una superglobal. (Nótese
que $HTTP_SESSION_VARS y $_SESSION son diferentes variables y PHP las trata de forma distinta)
Report a bug
Historial de cambios
Versión
4.1.0
Descripción
Se introdujo $_SESSION y $HTTP_SESSION_VARS quedó
absoleta.
Report a bug
Notas
Nota:
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.
Report a bug
Ver también

session_start() - Iniciar una nueva sesión o reanudar la existente
$_SESSION
$HTTP_SESSION_VARS [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_SESSION -- $HTTP_SESSION_VARS [obsoleta] — Variables de sesión
Report a bug
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.
$HTTP_SESSION_VARS contiene la misma información inicial pero no es una superglobal. (Nótese
que $HTTP_SESSION_VARS y $_SESSION son diferentes variables y PHP las trata de forma distinta)
Report a bug
Historial de cambios
Versión
4.1.0
Descripción
Se introdujo $_SESSION y $HTTP_SESSION_VARS quedó
absoleta.
Report a bug
Notas
Nota:
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.
Report a bug
Ver también

session_start() - Iniciar una nueva sesión o reanudar la existente
$_ENV
$HTTP_ENV_VARS [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_ENV -- $HTTP_ENV_VARS [obsoleta] — Variables de entorno
Report a bug
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.
$HTTP_ENV_VARS contiene la misma información inicial, pero no es una superglobal. (Note
que $HTTP_ENV_VARS y $_ENV son variables diferentes y que PHP las trata como tal)
Report a bug
Historial de cambios
Versión
4.1.0
Descripción
Se introdujo $_ENV,
haciendo $HTTP_ENV_VARS obsoleta.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de $_ENV
<?php
echo '¡Mi nombre de usuario es ' . $_ENV["USER"] . '!';
?>
Asumiendo que "bjori" ejecuta este script
El resultado del ejemplo sería algo similar a:
¡Mi nombre de usuario es bjori!
Report a bug
Notas
Nota:
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.
Report a bug
Ver también


getenv() - Obtiene el valor de una variable de entorno
La extensión filter
$_COOKIE
$HTTP_COOKIE_VARS [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_COOKIE -- $HTTP_COOKIE_VARS [obsoleta] — Cookies HTTP
Report a bug
Descripción
Una variable tipo array asociativo de variables pasadas al script actual a través de Cookies HTTP.
$HTTP_COOKIE_VARS contiene la misma información inicial, pero no es una superglobal. (Note
que $HTTP_COOKIE_VARS y $_COOKIE son variables diferentes y que PHP las trata como tal)
Report a bug
Historial de cambios
Versión
4.1.0
Descripción
Se introdujo $_COOKIE,
haciendo $HTTP_COOKIE_VARS obsoleta.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de $_COOKIE
<?php
echo '¡Hola ' . htmlspecialchars($_COOKIE["nombre"]) . '!';
?>
Asumiendo que la cookie "nombre" ha sido definida anteriormente
El resultado del ejemplo sería algo similar a:
¡Hola Juan!
Report a bug
Notas
Nota:
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.
Report a bug
Ver también



setcookie() - Enviar una cookie
Gestión de variables externas
La extensión filter
$php_errormsg
(PHP 4, PHP 5)
$php_errormsg — El último mensaje de error
Report a bug
Descripción
$php_errormsg es una variable que contiene el texto del último mensaje de error generado por PHP.
Esta variable solo está disponible en el entorno en donde el error ocurrió y solamente funcionará si la
opción de configuración track_errors está activada on (por defecto es off).
Nota: Esta variable solamente está disponible cuando la directiva track_errors está activada en
el php.ini.
Advertencia
Si el usuario ha definido un controlador de errores ( set_error_handler()), $php_errormsg tendrá un
valor solamente si el controlador de errores devuelve FALSE
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de $php_errormsg
<?php
@strpos();
echo $php_errormsg;
?>
El resultado del ejemplo sería algo similar a:
Wrong parameter count for strpos()
$HTTP_RAW_POST_DATA
(PHP 4, PHP 5)
$HTTP_RAW_POST_DATA — Datos POST sin tratar
Report a bug
Descripción
$HTTP_RAW_POST_DATA contiene los datos POST sin tratar. Véase always_populate_raw_post_data
add a noteUser Contributed Notes
$HTTP_RAW_POST_DATA
Ray dot Paseur at GMail dot com 12-Nov-2009 07:33
To get the Raw Post Data:
<?php $postdata = file_get_contents("php://input"); ?>
Please see the notes here:
http://us.php.net/manual/en/wrappers.php.php
$http_response_header
(PHP 4 >= 4.0.4, PHP 5)
$http_response_header — Encabezados de respuesta HTTP
Report a bug
Descripción
El array $http_response_header es similar a la functión get_headers(). Cuando se hace uso de HTTP
wrapper, $http_response_header será poblado con los encabezados de respuesta
HTTP. $http_response_header será creada en el ámbito global.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de $http_response_header
<?php
function get_contents() {
file_get_contents("http://example.com");
var_dump($http_response_header);
}
get_contents();
var_dump($http_response_header);
?>
El resultado del ejemplo sería algo similar a:
array(9) {
[0]=>
string(15)
[1]=>
string(35)
[2]=>
string(29)
[3]=>
string(44)
[4]=>
string(27)
[5]=>
string(20)
[6]=>
string(19)
[7]=>
string(17)
[8]=>
string(38)
}
NULL
"HTTP/1.1 200 OK"
"Date: Sat, 12 Apr 2008 17:30:38 GMT"
"Server: Apache/2.2.3 (CentOS)"
"Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
"ETag: "280100-1b6-80bfd280""
"Accept-Ranges: bytes"
"Content-Length: 438"
"Connection: close"
"Content-Type: text/html; charset=UTF-8"
$argc
(PHP 4, PHP 5)
$argc — El número de argumentos pasados a un script
Report a bug
Descripción
Contiene el número de argumentos pasados al script actual cuando se ejecuta desde la línea de
comandos.
Nota: El nombre del script es pasado siempre como argumento del script, por lo tanto, el valor
mínimo de $argc es 1.
Nota: Esta variable sólo está disponible cuando register_argc_argv está activado.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de $argc
<?php
var_dump($argc);
?>
Cuando se ejecuta el ejemplo con: php script.php arg1 arg2 arg3
El resultado del ejemplo sería algo similar a:
int(4)
$argv
(PHP 4, PHP 5)
$argv — Array de argumentos pasados a un script
Report a bug
Descripción
Contiene un array de todos los argumentos pasados a un script cuando se ejecuta desde la línea de
comandos.
Nota: El primer argumento $argv[0] siempre es el nombre del fichero que fue usado para ejecutar el
script.
Nota: Esta variable no está disponible si register_argc_argv está deshabilitado.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de $argv
<?php
var_dump($argv);
?>
Cuando se ejecuta el ejemplo con: php script.php arg1 arg2 arg3
El resultado del ejemplo sería algo similar a:
array(4) {
[0]=>
string(10) "script.php"
[1]=>
string(4) "arg1"
[2]=>
string(4) "arg2"
[3]=>
string(4) "arg3"
}
Report a bug
Ver también

getopt() - Obtiene las opciones de la lista de argumentos de la línea de comandos
Excepciones predefinidas
Tabla de contenidos


Exception
ErrorException
Ver también las Excepciones SPL
Exception
(PHP 5 >= 5.1.0)
Introducción
Exception es la clase base para todas las excepciones.
Sinopsis de la Clase
Exception {
/* Propiedades */
protected string $message ;
protected int $code ;
protected string $file ;
protected int $line ;
/* Métodos */
public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )
final public string getMessage ( void )
final public Exception getPrevious ( void )
final public mixed getCode ( void )
final public string getFile ( void )
final public int getLine ( void )
final public array getTrace ( void )
final public string getTraceAsString ( void )
public string __toString ( void )
final private void __clone ( void )
}
Propiedades
message
El mensaje de la excepción
code
El código de la excepción
file
El nombre del fichero donde se originó la excepción
line
La línea donde se originó la excepción
Tabla de contenidos










ErrorException
(PHP 5 >= 5.1.0)
Introducción
Una excepción de error.
Exception::__construct — Constructor de la excepción
Exception::getMessage — Obtiene el mensaje de Excepción
Exception::getPrevious — Devuelve la excepción anterior
Exception::getCode — Obtiene el código de Excepción
Exception::getFile — Obtiene el fichero en el que ocurrió la excepción
Exception::getLine — Obtiene la línea en donde ocurrió la excepción
Exception::getTrace — Obtiene el seguimiento de la pila
Exception::getTraceAsString — Obtiene el stack trace como cadena
Exception::__toString — Representación de la excepción en formato cadena
Exception::__clone — Clona la excepción
Sinopsis de la Clase
ErrorException extends Exception {
/* Propiedades */
protected int $severity ;
/* Métodos */
public __construct ([ string $message = "" [, int $code = 0 [, int $severity = 1 [, string $filename =
__FILE__ [, int $lineno = __LINE__ [,Exception $previous = NULL ]]]]]] )
final public int getSeverity ( void )
/* Métodos heredados */
final public string Exception::getMessage ( void )
final public Exception Exception::getPrevious ( void )
final public mixed Exception::getCode ( void )
final public string Exception::getFile ( void )
final public int Exception::getLine ( void )
final public array Exception::getTrace ( void )
final public string Exception::getTraceAsString ( void )
public string Exception::__toString ( void )
final private void Exception::__clone ( void )
}
Propiedades
severity
La gravedad de la excepción
Ejemplos
Ejemplo #1 Use set_error_handler() para convertir mensajes de error en objetos
ErrorException.
<?php
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");
/* Desencadenar la excepción */
strpos();
?>
El resultado del ejemplo sería algo similar a:
Fatal error: Uncaught exception 'ErrorException' with message 'Wrong parameter count for
strpos()' in /home/bjori/tmp/ex.php:8
Stack trace:
#0 [internal function]: exception_error_handler(2, 'Wrong parameter...', '/home/bjori/php...',
8, Array)
#1 /home/bjori/php/cleandocs/test.php(8): strpos()
#2 {main}
thrown in /home/bjori/tmp/ex.php on line 8
Tabla de contenidos


ErrorException::__construct — Constructor de la Excepción
ErrorException::getSeverity — Obtiene la severidad de la excepción
Interfaces predefinidas
La interfaz Traversable
(No hay información de versión disponible, podría estar únicamente en SVN)
Introducción
Interfaz para detectar si una clase puede ser recorrida mediante foreach.
Una interfaz abstracta base no puede ser implementada sola. En su lugar, debe ser implementada
con IteratorAggregate o con Iterator.
Nota:
Las clases internas que implementan esta interfaz pueden ser usadas en una construcción foreach y
no necesitan implementar IteratorAggregate o Iterator.
Nota:
Este es un motor interno de interfaz que no puede ser implementado en scripts de PHP. Se debe
emplear en su lugar o IteratorAggregate, o bien Iterator. Cuando se implementa una interfaz que
extiende a Traversable, asegúrese de enumerara IteratorAggregate o Iterator antes de su nombre en
la cláusula de implementación.
Sinopsis de la Interfaz
Traversable {
}
Esta interfaz no tiene métodos; su único propósito es servir de interfaz base para todas las clases que
se pueden recorrer.
La interfaz Iterator
(PHP 5 >= 5.0.0)
Introducción
Interfaz para iteradores externos u objetos que pueden ser iterados internamente por sí mismos.
Sinopsis de la Interfaz
Iterator extends Traversable {
/* Métodos */
abstract public mixed current ( void )
abstract public scalar key ( void )
abstract public void next ( void )
abstract public void rewind ( void )
abstract public boolean valid ( void )
}
Iteradores Predefinidos
PHP ya ofrece un número de iteradores para muchas de las tareas del día a día. Véase la lista
de iteradores SPL.
Ejemplos
Ejemplo #1 Uso básico
Este ejemplo muestra el orden en el que se llaman a los métodos cuando se emplea un foreach con
un iterator.
<?php
class myIterator implements Iterator {
private $position = 0;
private $array = array(
"firstelement",
"secondelement",
"lastelement",
);
public function __construct() {
$this->position = 0;
}
function rewind() {
var_dump(__METHOD__);
$this->position = 0;
}
function current() {
var_dump(__METHOD__);
return $this->array[$this->position];
}
function key() {
var_dump(__METHOD__);
return $this->position;
}
function next() {
var_dump(__METHOD__);
++$this->position;
}
function valid() {
var_dump(__METHOD__);
return isset($this->array[$this->position]);
}
}
$it = new myIterator;
foreach($it as $key => $value) {
var_dump($key, $value);
echo "\n";
}
?>
El resultado del ejemplo sería algo similar a:
string(18)
string(17)
string(19)
string(15)
int(0)
string(12)
"myIterator::rewind"
"myIterator::valid"
"myIterator::current"
"myIterator::key"
string(16)
string(17)
string(19)
string(15)
int(1)
string(13)
"myIterator::next"
"myIterator::valid"
"myIterator::current"
"myIterator::key"
string(16)
string(17)
string(19)
string(15)
int(2)
string(11)
"myIterator::next"
"myIterator::valid"
"myIterator::current"
"myIterator::key"
"firstelement"
"secondelement"
"lastelement"
string(16) "myIterator::next"
string(17) "myIterator::valid"
Tabla de contenidos



Iterator::current — Devuelve el elemento actual
Iterator::key — Devuelve la clave del elemento actual
Iterator::next — Avanza al siguiente elemento


Iterator::rewind — Rebobine la Iterator al primer elemento
Iterator::valid — Comprueba si la posición actual es válido
La interfaz IteratorAggregate
(PHP 5 >= 5.0.0)
Introducción
Para crear una interfaz externa Iterator.
Sinopsis de la Interfaz
IteratorAggregate extends Traversable {
/* Métodos */
abstract public Traversable getIterator ( void )
}
Ejemplo #1 Uso básico
<?php
class myData implements
public $property1 =
public $property2 =
public $property3 =
IteratorAggregate {
"Public property one";
"Public property two";
"Public property three";
public function __construct() {
$this->property4 = "last property";
}
public function getIterator() {
return new ArrayIterator($this);
}
}
$obj = new myData;
foreach($obj as $key => $value) {
var_dump($key, $value);
echo "\n";
}
?>
El resultado del ejemplo sería algo similar a:
string(9) "property1"
string(19) "Public property one"
string(9) "property2"
string(19) "Public property two"
string(9) "property3"
string(21) "Public property three"
string(9) "property4"
string(13) "last property"
Tabla de contenidos

IteratorAggregate::getIterator — Recuperar un Iterator externo
La interfaz ArrayAccess
(PHP 5 >= 5.0.0)
Introducción
Interfaz para proporcionar acceso a objetos como arrays.
Sinopsis de la Interfaz
ArrayAccess {
/* Métodos */
abstract public boolean offsetExists ( mixed $offset )
abstract public mixed offsetGet ( mixed $offset )
abstract public void offsetSet ( mixed $offset , mixed $value )
abstract public void offsetUnset ( mixed $offset )
}
Ejemplo #1 Uso básico
<?php
class obj implements arrayaccess {
private $container = array();
public function __construct() {
$this->container = array(
"one"
=> 1,
"two"
=> 2,
"three" => 3,
);
}
public function offsetSet($offset, $value) {
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
public function offsetExists($offset) {
return isset($this->container[$offset]);
}
public function offsetUnset($offset) {
unset($this->container[$offset]);
}
public function offsetGet($offset) {
return isset($this->container[$offset]) ? $this->container[$offset] : null;
}
}
$obj = new obj;
var_dump(isset($obj["two"]));
var_dump($obj["two"]);
unset($obj["two"]);
var_dump(isset($obj["two"]));
$obj["two"] = "A value";
var_dump($obj["two"]);
$obj[] = 'Append 1';
$obj[] = 'Append 2';
$obj[] = 'Append 3';
print_r($obj);
?>
El resultado del ejemplo sería algo similar a:
bool(true)
int(2)
bool(false)
string(7) "A value"
obj Object
(
[container:obj:private] => Array
(
[one] => 1
[three] => 3
[two] => A value
[0] => Append 1
[1] => Append 2
[2] => Append 3
)
)
Tabla de contenidos




ArrayAccess::offsetExists — Comprobar si existe o no un índice
ArrayAccess::offsetGet — Offset para recuperar
ArrayAccess::offsetSet — Inicializa un offset
ArrayAccess::offsetUnset — Destruye un offset
La interfaz Serializable
(PHP 5 >= 5.1.0)
Introducción
Interfaz para personalizar la serialización.
Las clases que implementan esta interfaz no soportan __sleep() ni __wakeup(). El método serialize
se llama cuando una instancia requiere ser serializada. Esto no invoca __destruct() ni tiene ningún
efecto adicional a menos que se programe dentro del método. Cuando los datos son deserializados, la
clase es conocida y el correspondiente método unserialize() es llamado como constructor en lugar de
llamar al método __construct(). Se puede ejecutar el constructor estándar en el método si fuera
necesario.
Sinopsis de la Interfaz
Serializable {
/* Métodos */
abstract public string serialize ( void )
abstract public void unserialize ( string $serialized )
}
Ejemplo #1 Uso básico
<?php
class obj implements Serializable {
private $data;
public function __construct() {
$this->data = "Mis datos privados";
}
public function serialize() {
return serialize($this->data);
}
public function unserialize($data) {
$this->data = unserialize($data);
}
public function getData() {
return $this->data;
}
}
$obj = new obj;
$ser = serialize($obj);
var_dump($ser);
$newobj = unserialize($ser);
var_dump($newobj->getData());
?>
El resultado del ejemplo sería algo similar a:
string(38) "C:3:"obj":23:{s:15:"Mis datos privados";}"
string(15) "Mis datos privados"
Tabla de contenidos


Serializable::serialize — Representación en formato cadena de un objeto
Serializable::unserialize — Construye el objeto
La clase Closure
(PHP 5 >= 5.3.0)
Introducción
Clase usada para representar funciones anónimas.
Las funciones anónimas, implementadas en PHP 5.3, producían objetos de este tipo. Este hecho solía
ser considerado como un detalle de implementación, pero ahora puede confiarse en él. Desde PHP
5.4, esta clase tiene métodos que permiten más control de las funciones anónimas después de que
hayan sido creadas.
Además de los métodos listados aquí, esta clase también posse un método __invoke. Esto es por
consistencia con otras clases que implementan la llamada mágica, ya que este método no se usa
para llamar a la función.
Sinopsis de la Clase
Closure {
/* Métodos */
__construct ( void )
public static Closure bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] )
public Closure bindTo ( object $newthis [, mixed $newscope = 'static' ] )
}
Tabla de contenidos



Closure::__construct — Constructor que anula la instanciación
Closure::bind — Duplicar un cierre con un objeto vinculado y ámbito de clase especificados
Closure::bindTo — Duplicar el cierre con un objeto vinculado y ámbito de clase nuevos
Opciones de contexto y parámetros
PHP ofrece varias opciones y parámetros de contexto que pueden ser usados con todas las envolturas
del sistema de archivos y las secuencias. El contexto es creado con stream_context_create(). Las
opciones son definidas con stream_context_set_option() y los parámetros
con stream_context_set_params().
Opciones de contexto de sockets
Opciones de contexto de sockets — Listado de opciones de contexto de sockets
Report a bug
Descripción
Las opciones de contexto de sockets están disponibles para todas las envolturas que trabajan sobre
sockets, como tcp, http y ftp.
Report a bug
Opciones
bindto
Usada para especificar la dirección IP (ya sea IPv4 o IPv6) y/o el número de puerto que PHP
usará para acceder a la red. La sintaxis esip:puerto. Definir el número IP o de puerto
como 0 producirá que el sistema lo elija por usted.
Nota:
Dado que FTP crea dos conexiones de socket durante la operación normal, no es posible
especificar el número de puerto con esta opción.
backlog
Usado para limitar el número de conexiones pendientes en la cola de escucha del socket.
Nota:
Solamente se aplica a stream_socket_server().
Report a bug
Historial de cambios
Versión
Descripción
5.1.0
Se agregó bindto.
5.3.3
Se
agregó backlog.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de uso básico de bindto
<?php
// conectarse a internet usando la IP '192.168.0.100'
$opciones = array(
'socket' => array(
'bindto' => '192.168.0.100:0',
),
);
// conectarse a internet usando la IP '192.168.0.100' y el puerto '7000'
$opciones = array(
'socket' => array(
'bindto' => '192.168.0.100:7000',
),
);
// conectarse a internet usando el puerto '7000'
$opciones = array(
'socket' => array(
'bindto' => '0:7000',
),
);
// crear el contexto...
$contexto = stream_context_create($opciones);
// ...y usarlo para recuperar los datos
echo file_get_contents('http://www.example.com', false, $contexto);
?>
Opciones de contexto de HTTP
Opciones de contexto de HTTP — Lista de opciones de contexto de HTTP
Report a bug
Descripción
Opciones de contexto para los transports http:// y https://.
Report a bug
Opciones
method
string
GET, POST, o cualquier otro método HTTP que soporte el servidor remoto.
Por omisión, GET.
header
string
Cabeceras adicionales que se envían en la petición. Los valores sobrescribirán los existentes
(como por ejemplo User-agent:, Host:, oAuthentication:).
user_agent
string
Valor de la cabecera User-Agent:. Sólo se utilizará si el user-agent no se ha especificado en
la opción de contexto header vista arriba.
por omisión se utiliza el valor del ajuste user_agent en php.ini.
content
string
Datos adicionales a enviar tras las cabeceras. Típicamente se utiliza con peticiones POST o
PUT.
proxy
string
URI que define la dirección de un servidor proxy (p.ej. tcp://proxy.example.com:5100).
request_fulluri
boolean
Si vale TRUE, se utilizará toda la URI para construir la petición. (es decir, GET
http://www.example.com/path/to/file.html HTTP/1.0). A pesar de que es un formato
de petición no estándar, algunos servidores proxy requieren que sea así.
Por omisión FALSE.
follow_location
integer
Seguir las redirecciones de las cabeceras Location. Establecer a 0 para deshabilitarlo.
Por omisión 1.
max_redirects
integer
Número máximo de redirecciones a seguir. Un valor igual o menor a 1 indica que no se siga
ninguna redirección.
Por omisión 20.
protocol_version
float
Versión del protocolo HTTP.
Por omisión 1.0.
Nota:
Las versiónes de PHP anteriores a la 5.3.0 no implementa decodificación de transferencias
fragmentadas. Si este valor es 1.1, es responsabilidad del programador cumplir con la
Versión
5.3.4
5.3.0
Descripción
Añadido follow_location.
La opción protocol_version soporta decodificación de transferencias fragmentadas en caso de
valer 1.1.
5.2.10
Añadido ignore_errors.
5.2.10
El parámetro header puede ahora ser un array de índices numéricos.
5.2.1
Añadido timeout.
5.1.0
Añadido soporte para HTTPS mediante proxies HTTP.
5.1.0
Añadido max_redirects.
5.1.0
Añadido protocol_version.
versión 1.1.
timeout
float
Tiempo de espera de lectura en segundos, especificado por un float (p.ej. 10.5).
Por omisión se utiliza el valor del ajuste default_socket_timeout de php.ini.
ignore_errors
boolean
Captura el contenido incluso con códigos de estado de error.
Por omisión FALSE.
Report a bug
Historial de cambios
Report a bug
Ejemplos
Ejemplo #1 Captura una página y envía datos POST
<?php
$postdata = http_build_query(
array(
'var1' => 'contenido',
'var2' => 'doh'
)
);
$opts = array('http'
array(
'method' =>
'header' =>
'content' =>
)
);
=>
'POST',
'Content-type: application/x-www-form-urlencoded',
$postdata
$context = stream_context_create($opts);
$result = file_get_contents('http://example.com/submit.php', false, $context);
?>
Ejemplo #2 Ignora las redirecciones per captura las cabeceras y el contenido
<?php
$url = "http://www.example.org/header.php";
$opts = array('http' =>
array(
'method' => 'GET',
'max_redirects' => '0',
'ignore_errors' => '1'
)
);
$context = stream_context_create($opts);
$stream = fopen($url, 'r', false, $context);
// información de cabeceras y meta datos
// sobre el flujo
var_dump(stream_get_meta_data($stream));
// datos reales en $url
var_dump(stream_get_contents($stream));
fclose($stream);
?>
Report a bug
Notas
Nota: Opciones de contexto del flujo de socket subyacente
Hay soporte para opciones de contexto adicionales en el transporte subyacente Para flujos http://,
deben consultarse las opciones de contexto del transporte tcp://. Para flujos https://, deben
consultarse las opciones de contexto del transporte ssl://.
Nota: Línea de estado HTTP
Cuando esta envultura sigue una redirección, el wrapper_data devuelto
por stream_get_meta_data() no contiene necesariamente la línea de estado HTTP que realmente se
aplica al contenido del índice 0.
array (
'wrapper_data' =>
array (
0 => 'HTTP/1.0 301 Moved Permantenly',
1 => 'Cache-Control: no-cache',
2 => 'Connection: close',
3 => 'Location: http://example.com/foo.jpg',
4 => 'HTTP/1.1 200 OK',
...
La primera petición devolvió un 301 (redirección permanente), de manera que la envoltura
automáticamente sigue la redirección para obtener una respuesta con código 200 (índice = 4).
Report a bug
Ver también



http://
Opciones de contexto de sockets
Opciones de contexto para SSL
Opciones de contexto para FTP
Opciones de contexto para FTP — Listado de opciones de contexto para FTP
Report a bug
Descripción
Opciones de contexto para transportes ftp:// y ftps://
Report a bug
Opciones
overwrite
boolean
Permite sobrescribir archivos ya existentes en el servidor remoto. Se aplica sólo al modo de
escritura (subida).
Defaults to FALSE.
resume_pos
integer
Desplazamiento de archivo en donde iniciar la transferencia. Se aplica sólo al modo de lectura
(descarga).
Por defecto es 0 (inicio del archivo).
proxy
string
Petición FTP al proxy por medio de un servidor proxy http. Se aplica sólo a operaciones de
lectura de archivos. Ejemplo:tcp://squid.example.com:8000.
Report a bug
Historial de cambios
Versión
Descripción
5.1.0
Se añadió proxy.
5.0.0
Se
Versión
Descripción
añadió overwrite y resume_pos.
Report a bug
Notas
Nota: Opciones subyacentes del contexto del flujo del socket
Opciones adicionales de contexto pueden se soportadas por el transporte
subyacente Para flujos ftp://, remitirse a las opciones de contexto para el
transporte tcp://. Para flujos ftps://, remitirse a las opciones de contexto para el
transporte ssl://.
Report a bug
Ver también



ftp://
Opciones de contexto de sockets
Opciones de contexto para SSL
Opciones de contexto para SSL
Opciones de contexto para SSL — Listado de opciones de contexto para SSL
Report a bug
Descripción
Opciones de contexto para transportes ssl:// y tls://
Report a bug
Opciones
verify_peer
boolean
Requiere verificación del certificado SSL utilizado.
Por defecto es FALSE.
allow_self_signed
boolean
Permite certificados auto-firmados. Requiere verify_peer.
Por defecto es FALSE
cafile
string
Ubicación del archivo de la entidad emisora de certificados en el sistema de archivos local, la
cual debe ser utilizada con la opción de contextoverify_peer para autenticar la identidad del
par remoto.
capath
string
Si no se específica cafile o si no se encuentra el certificado, el directorio al que
apunta capath sera explorado en busca de un certificado apropiado. capath debe ser un
directorio con el hash correcto.
local_cert
string
Ruta hacia el archivo del certificado local en el sistema de archivos. Debe ser un archivo
codificado con PEM el cual contenga el certificado y la llave privada. Puede, opcionalmente,
contener la cadena de los emisores del certificado.
passphrase
string
La frase de contraseña con la cual el archivo local_cert fue codificado.
CN_match
string
El nombre común que se está esperando. PHP realizará comparaciones limitadas de
comodines. Si el nombre común no coincide con esto, el intento de conexión fallará.
verify_depth
integer
Abortar si la cadena de certificados es demasiado profunda.
Por defecto es no verificarlo.
ciphers
string
Establece la lista de sistemas de cifrado disponibles. El formato de la cadena se describe
en » ciphers(1).
Por defecto es DEFAULT.
capture_peer_cert
boolean
Si se establece en TRUE, una opción de contexto peer_certificate será creada, conteniendo el
certificado par.
capture_peer_cert_chain
boolean
Si se establece en TRUE, una opción de contexto peer_certificate_chain será creada,
conteniendo la cadena del certificado.
SNI_enabled
boolean
Si se establece en TRUE, la indicación del nombre del servidor se activará. Activando SNI se
permiten múltiples certificados en la misma dirección IP.
SNI_server_name
string
Si se establece, entonces este valor se utilizará como nombre del servidor para la indicación de
nombre de servidor. Si este valor no está establecido, entonces el nombre del servidor se
supone basado en el nombre de host utilizado cuando se abre el flujo.
Historial de cambios
Versión
5.3.2
5.0.0
Descripción
Se agregó SNI_enabled y SNI_server_name.
Se
agregó capture_peer_cert, capture_peer_chain and ciphers.
Notas
Nota: Debido a que ssl:// el es transporte subyacente para las envolturas https:// y ftps://,
cualquier opción de contexto que aplique parassl:// también aplica para https:// y ftps://.
Nota: Para que SNI (Server Name Indication) esté disponible, entonces PHP se debe compilar con
OpenSSL 0.9.8j o superior. Se utilizaOPENSSL_TLSEXT_SERVER_NAME para determinar si SNI está
soportado.
Opciones de contexto para CURL
Opciones de contexto para CURL — Listado de opciones de contexto para CURL
Report a bug
Descripción
Las opciones de contexto para CURL están disponibles cuando la extensión CURL fue compilada
usando la opción de configuración --with-curlwrappers .
Report a bug
Opciones
method
string
GET, POST, o cualquier otro método HTTP soportado por el servidor remoto.
Por defecto es GET.
header
string
Cabeceras adicionales a ser enviadas durante la petición. Los valores de esta opción
sobrescribirán otros valores (como por ejemplo User-agent:, Host:, y Authentication:).
user_agent
string
Valor a ser enviado con la cabecera User-Agent:.
Por defecto se usa la configuración user_agent de php.ini.
content
string
Datos adicionales para ser enviados después de las cabeceras. Esta opción no se utiliza para
peticiones GET o HEAD.
proxy
string
URI que especifica la dirección del servidor proxy. (Por
ejemplo tcp://proxy.example.com:5100).
max_redirects
integer
El número máximo de redirecciones a seguir. Un valor de 1 o menos significa que no se siguen
la redirecciones.
Por defecto es 20.
curl_verify_ssl_host
boolean
Verifica el host.
Por defecto es FALSE
Nota:
Esta opción está disponible tanto para envolturas del protocolo http como del ftp.
curl_verify_ssl_peer
boolean
Requiere verificación del certificado SSL utilizado.
Por defecto es FALSE
Nota:
Esta opción está disponible tanto para envolturas del protocolo http como del ftp.
Report a bug
Ejemplos
Ejemplo #1 Obtener una página y enviar datos POST
<?php
$postdata = http_build_query(
array(
'var1' => 'some content',
'var2' => 'doh'
)
);
$opts = array('http'
array(
'method' =>
'header' =>
'content' =>
)
);
=>
'POST',
'Content-type: application/x-www-form-urlencoded',
$postdata
$context = stream_context_create($opts);
$result = file_get_contents('http://example.com/submit.php', false, $context);
?>
Opciones de contexto Phar
Opciones de contexto Phar — Listado de opciones de contexto Phar
Report a bug
Descripción
Opciones de contexto para phar:// envoltura.
Report a bug
Opciones
comprimir
int
Uno de Constantes de compresión Phar.
metadata
mixed
Metadatos Phar. Ver Phar::setMetadata().
Contexto parámetros
Contexto parámetros — Contexto lista de parámetros
Report a bug
Descripción
Estos parametros se puede establecer en un contexto usando el la
función stream_context_set_params().
Report a bug
Parámetros
notification
callable
Una callable que se llamará cuando se produce un evento en una secuencia.
Véase stream_notification_callback() para más detalles.
Descargar