Ámbito Global permite el uso de una variable en una función que se define fuera de la función. por ejemplo

$a=1;
function $test(){
echo $a;
}

//outputs 1

pero ¿por qué es que si defino una variable con una matriz no se puede usar de la misma manera?

$test = array(
0=>'zero', 
1=>'one', 
2=>'two',
3=>'three', 
);

function doesntWork($something){
echo "My favorite number is " . $test[$something]; 
}

//outputs My favorite number is 0

¿Cómo puedo pasar de la matriz en la función sin tener que volver a copiar la matriz en la propia función.

cualquier explicación sería apreciada
gracias

InformationsquelleAutor chris | 2009-04-30

3 Comentarios

  1. 4

    script #1 no es correcta. tampoco de trabajo (función **$**test() {…}), ni tampoco de salida «1». y globales SON una mala práctica. los envuelve en una clase no tiene nada que ver con ella. clases no son una solución para los problemas de azar no relacionados con la orientación a objetos.

    acaba de pasar $a como un parámetro:

    <?php 
      $a=1; 
      function test($foo) { 
        echo 'number ' . $foo; 
      }; 
    
      test($a);
      //-> "number 1". 
     ?>

    script #2:

    <?php
      $test = array(
        0=>'zero', 
        1=>'one', 
        2=>'two',
        3=>'three', 
      );
    
      function doesntWork($test, $something){
        echo "My favorite number is " . $test[$something]; 
      }
    
      doesntWork($test, mt_rand(0,3));
    ?>
    • ok, así que usted necesidad de redefinir la matriz dentro de la función? Le pregunté acerca de las clases, porque he visto a la gente el uso público de la variable con la programación orientada a objetos y definir las variables de una vez. Estoy buscando las mejores prácticas gracias
    • gracias eso es exactamente lo que yo necesitaba. Yo terminé haciendo con la programación orientada a objetos clase de obras{ var $a; función favNum{echo $this->;} }
    • Me encanta esta respuesta del primer párrafo!
    • El & notación debe ser utilizado cuando se desea copiar por referencia en lugar de copiar-por-valor en PHP. Consulte php.net/manual/en/language.references.pass.php para más información.
  2. 3

    Tu primer ejemplo, no debe de salida 1. La única manera de hacer que las variables globales en una función en particular es el uso de la palabra clave global como este:

    function test() {
        global $a;
        echo $a;
    }
    
    function doesWork($something) {
        global $test;
        echo "My favorite number is " . $test[$something]; 
    }

    Más info aquí: http://ca2.php.net/manual/en/language.variables.scope.php

    • oí el uso de variables globales de todo el tiempo es malo practicar… debo envuelve en una clase?
  3. 0

    PHP no tienen implícito de alcance global; debe utilizar la global palabra clave de acceso «global» de las variables.

    $a la salida 1 es probablemente debido a una complejidad de PHP dudoso manejo de variables.

Dejar respuesta

Please enter your comment!
Please enter your name here