Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

52
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;

description

Manual

Transcript of Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

Page 1: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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;

Page 2: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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

Page 3: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

<?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)

Page 4: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

{

$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í

?>

Page 5: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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.

Page 6: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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;

}

Page 7: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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?"

Page 8: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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 Descripción

4.1.0 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

Page 9: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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.

Page 10: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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'

Page 11: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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:

Page 12: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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'.

Page 13: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

'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 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'

Page 14: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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'

Page 15: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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

Page 16: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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 Descripción

4.1.0 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

Page 17: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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 Descripción

4.1.0 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

Page 18: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

$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 Descripción

4.1.0 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

Page 19: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

$_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 Descripción

4.1.0 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.

Page 20: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

Report a bug

Historial de cambios

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.

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

Page 21: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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 Descripción

4.1.0 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)

Page 22: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

Report a bug

Historial de cambios

Versión Descripción

4.1.0 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

Page 23: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

Historial de cambios

Versión Descripción

4.1.0 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)

Page 24: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

Report a bug

Historial de cambios

Versión Descripción

4.1.0 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).

Page 25: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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)

Page 26: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

$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) "HTTP/1.1 200 OK"

[1]=> string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"

[2]=>

string(29) "Server: Apache/2.2.3 (CentOS)"

[3]=>

string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT" [4]=>

string(27) "ETag: "280100-1b6-80bfd280""

[5]=>

string(20) "Accept-Ranges: bytes"

[6]=> string(19) "Content-Length: 438"

[7]=> string(17) "Connection: close"

[8]=>

string(38) "Content-Type: text/html; charset=UTF-8" }

NULL

$argc

(PHP 4, PHP 5)

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

Report a bug

Page 27: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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]=>

Page 28: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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 )

Page 29: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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

� 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

ErrorException

(PHP 5 >= 5.1.0)

Introducción

Una excepción de error.

Page 30: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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:

Page 31: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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.

Page 32: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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__);

Page 33: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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) "myIterator::rewind"

string(17) "myIterator::valid" string(19) "myIterator::current"

string(15) "myIterator::key"

int(0) string(12) "firstelement"

string(16) "myIterator::next"

string(17) "myIterator::valid"

string(19) "myIterator::current" string(15) "myIterator::key"

int(1) string(13) "secondelement"

string(16) "myIterator::next"

string(17) "myIterator::valid"

string(19) "myIterator::current" string(15) "myIterator::key"

int(2)

string(11) "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

Page 34: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

� 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 IteratorAggregate {

public $property1 = "Public property one";

public $property2 = "Public property two";

public $property3 = "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"

Page 35: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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]);

}

Page 36: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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)

Page 37: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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"

Page 38: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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().

Page 39: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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

Page 40: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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

Page 41: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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

Page 42: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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 Descripción

5.3.4 Añadido follow_location.

5.3.0 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.

Page 43: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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' => 'POST',

'header' => 'Content-type: application/x-www-form-urlencoded',

'content' => $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

Page 44: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

$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

Page 45: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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

Page 46: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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.

Page 47: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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.

Page 48: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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 Descripción

5.3.2 Se agregó SNI_enabled y SNI_server_name.

5.0.0 Se

agregó capture_peer_cert, capture_peer_chain and ciphers.

Page 49: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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.

Page 50: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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

Page 51: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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' => 'POST',

'header' => 'Content-type: application/x-www-form-urlencoded',

'content' => $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().

Page 52: Manual Completo Php 5xx - 5. Lenguaje Avanzado 2 - 2012-10-08

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.