manual completo php 5xx - 5. lenguaje avanzado 2 - 2012-10-08

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

Post on 16-Jul-2016

214 views

Category:

Documents

0 download

Embed Size (px)

DESCRIPTION

Manual

TRANSCRIPT

  • 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 aritmtica de

    punteros con ellas, realmente no son direcciones de memoria, etc. Vase Qu NO son las

    Referencias? para ms informacin. Las referencias son alias de la tabla de smbolos. 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 analoga ms prxima 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 bsicas que se realizan usando referencias: asignar por referencia, pasar por referencia, y devolver por referencia. En esta seccin se dar una introduccin 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:

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

  • 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):

    Desde PHP 5, new devuelve una referencia automticamente, 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. (Tcnicamente, la diferencia es que, en PHP 5, las variables de objetos, como

    los recursos, son meros punteros a la informacin del objeto actual, por lo que estas referencias a

    objetos no son "referencias" en el mismo sentido usado antes (alias). Para ms informacin,

    vase Objetos y referencias.)

    Advertencia

    Si se asigna una referencia a una varible declarada global dentro de una funcin, la referencia ser visible slo dentro de la funcin. Se puede evitar esto usando la matriz $GLOBALS.

    Ejemplo #2 Refenciar variables globales dentro de funciones

    Piense en global $var; como simplificacin de $var =& $GLOBALS['var'];. De este modo, al

    asignar otra referencia a $var slo cambia la referencia de la variable local.

    Nota:

    Si se asigna un valor a una variable con referencias en una sentencia foreach, tambin se modifican las referencias.

    Ejemplo #3 Referencias y la sentencia foreach

  • Mientras que no sea estrictamente una asignacin por referencia, las expresiones creadas con el constructor de lenguaje array() tambin pueden comportarse como tales prefijando & al elemento del array a aadir. Ejemplo:

    Observe, sin embargo, que las referencias dentro de arrays son potencialmente peligrosas. Realizar una asignacin 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 tambin se aplica a las llamadas a funciones donde el array es pasado por valor. Ejemplo:

    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 funcin y una variable en el mbito de la llamada referencien al mismo contenido. Ejemplo:

  • {

    $var++;

    }

    $a=5;

    foo($a);

    ?>

    har que $a sea 6. Esto sucede porque en la funcin foo la variable $var hace referencia al mismo

    contenido que $a. Para ms informacin sobre esto, lea la seccin 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 construccin no har lo que se esperaba:

    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 funcin foo (est representada

    por $var, pero $varslo tiene el contenido de la variable y no la vinculacin nombre-a-valor en la

    tabla de smbolos de llamada). Se puede usar devolver referencias para referencias variables

    seleccionadas por la funcin.

    Pasar por Referencia

    Se puede pasar una variable por referencia a una funcin y as hacer que la funcin pueda modificar la variable. La sintaxis es la siguiente:

  • Nota: No existe ningn signo de referencia en una llamada a una funcin - slo en la definicin de la funcin. 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:

    Vea ms sobre devolver por referencia.

    Ninguna otra expresin debera pasarse por referencia, ya que el resultado no est definido. Por ejemplo, los siguientes ejemplos de pasar por referencia no son vlidos:

    Estos requerimientos son para PHP 4.0.4 y posterior.

  • Devolver Referencias

    Devolver por referencia es til cuando se quiere usar una funcin para encontrar a qu variable debera estar vinculada una referencia. No use devolver por referencia para aumentar el rendimiento. El motor optimizar automticamente esto por s mismo. Hay que devolver referencias slo cuando se tenga una razn tcnicamente vlida para hacerlo. Para devolver referencias use esta sintaxis:

    En este ejemplo, la propiedad del objeto devuelto por la funcin obtenerValor debera estar

    establecida, no la copia, como si estuviera sin usar la sintaxis de referencia.

    Nota: A diferencia de pasar un parmetro, aqu se tiene que usar & en ambos lugares - para indicar que se quiere devolver por referencia, no una copia, y para indicar que la vinculacin por referencia, en vez de la asignacin normal, debera ser hecha para $miValor.

    Nota: Si se intenta devolver una referencia desde una funcin con la sintaxis: return ($this->valor);, no funcionar ya que se est intentando devolver el resultado de una expresin, y no de una variable, por referencia. Slo se puede devolver variables por referencia desde una funcin - nada ms. 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 cdigo intenta devolver una expresin dinmica o un resultado del operador new.

    Para usar la referencia retornada, se debe usar la asignacin por referencia:

    Para pasar la referencia retornada a otra funcin que espera una referencia se puede usar la

    siguiente sintaxis:

  • 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 vnculo 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:

    no destruir $b, slo $a.

    De nuevo, podra ser til pensar en esto como anlogo a una llamada a unlink de Unix.

    Ubicar las Referencias Muchas construcciones sintcticas de PHP estn implementadas mediante el mecanismo de

    referencia, por lo que todo lo mencionado aqu sobre la vinculacin de referencias tambin 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:

    Esto tambin significa que al destruir $var no se destruir la variable global.

    $this En un mtodo 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.

    Vase tambin la pregunta frecuente titulada "Cmo me afecta register_globals?"

  • Superglobals

    Superglobals Superglobals son variables internas que estn disponibles siempre en todos los mbitos