Hosting de Calidad
  • Inicio
  • Precios y servicios
  • F.a.q y ayudas
  • Realizar pedido
  • Webs alojadas
  • Quienes somos
  • Foro HyD
  • Contacto

    Zona Dominios

    Entrar
    registro de dominios


    Zona Hosting

    Entrar
    alojamiento web


    5 Métodos de Pago
    Tarjeta de crédito
    Domiciliación
    Transferencia
    Soporte Epagado
    Soporte Paypal

    Liberalización .es

    Ver mas
    dominios .es


  •  
     
     
    Ambito de las variables

    Ambito de las variables

    El ámbito de una variable es el contexto dentro del que la variable está definida_ La mayor parte de las variables PHP sólo tienen un ámbito simple_ Este ámbito simple también abarca los ficheros incluidos y los requeridos_ Por ejemplo:

    <?php
    $a = 1;
    include "b_inc";
    ?>

    Aquí, la variable $a dentro del script incluido b_inc_ De todas formas, dentro de las funciones definidas por el usuario aparece un ámbito local a la función_ Cualquier variables que se use dentro de una función está, por defecto, limitada al ámbito local de la función_ Por ejemplo:

    <?php
    $a = 1; /* global scope */ 
    
    function Test()
    { 
        echo $a; /* reference to local scope variable */ 
    } 
    
    Test();
    ?>

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

    <?php
    $a = 1;
    $b = 2;
    
    function Sum()
    {
        global $a, $b;
    
        $b = $a + $b;
    } 
    
    Sum();
    echo $b;
    ?>

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

    Un segundo método para acceder a las variables desde un ámbito global es usando la matriz $GLOBALS_ El ejemplo anterior se puede reescribir así:

    <?php
    $a = 1;
    $b = 2;
    
    function Sum()
    {
        $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
    } 
    
    Sum();
    echo $b;
    ?>

    La matriz $GLOBALS es una matriz asociativa con el nombre de la variable global como clave y los contenidos de dicha variable como el valor del elemento de la matriz_ $GLOBALS existe en cualquier ámbito, esto pasa porque $GLOBALS es una superglobal_ Aqui teneis un ejemplo que demuestra el poder de las superglobales:

    <?php
    function test_global()
    {
        // Most predefined variables aren't "super" and require 
        // 'global' to be available to the functions local scope_
        global $HTTP_POST_VARS;
        
        print $HTTP_POST_VARS['name'];
        
        // Superglobals are available in any scope and do 
        // not require 'global'_  Superglobals are available 
        // as of PHP 4_1_0
        print $_POST['name'];
    }
    ?>

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

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

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

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

    Ahora, cada vez que se llame a la función Test(), se representará el valor de $a y se incrementará_

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

    <?php
    function Test()
    {
        static $count = 0;
    
        $count++;
        echo $count;
        if ($count < 10) {
            Test ();
        }
        $count__;
    }
    ?>

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

    <?php
    function test_global_ref() {
        global $obj;
        $obj = &new stdclass;
    }
    
    function test_global_noref() {
        global $obj;
        $obj = new stdclass;
    }
    
    test_global_ref();
    var_dump($obj);
    test_global_noref();
    var_dump($obj);
    ?>

    Al ejecutar este ejemplo obtendremos la siguiente salida:

    NULL
    object(stdClass)(0) {
    }

    Un comportamiento similar se aplica a static_ Referencias no son guardadas estáticamente_

    <?php
    function &get_instance_ref() {
        static $obj;
    
        echo "Static object: ";
        var_dump($obj);
        if (!isset($obj)) {
            // Assign a reference to the static variable
            $obj = &new stdclass;
        }
        $obj_>property++;
        return $obj;
    }
    
    function &get_instance_noref() {
        static $obj;
    
        echo "Static object: ";
        var_dump($obj);
        if (!isset($obj)) {
            // Assign the object to the static variable
            $obj = new stdclass;
        }
        $obj_>property++;
        return $obj;
    }
    
    $obj1 = get_instance_ref();
    $still_obj1 = get_instance_ref();
    echo "\n";
    $obj2 = get_instance_noref();
    $still_obj2 = get_instance_noref();
    ?>

    Al ejecutar este ejemplo obtendremos la siguiente salida:

    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }

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

     
       



    registro de dominios | alojamiento web | hosting por publicidad

       

     

    Manual de linux Manual de apache Manual de php Manual de mysql Manual de SQL Manual del Plesk Como funciona Paypal Manual de html