Как вызвать массив в функции? PHP - PullRequest
1 голос
/ 01 мая 2009

Глобальная область действия позволяет использовать переменную в функции, которая была определена вне функции. например,

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

//outputs 1

но почему, если я определяю переменную с массивом, я не могу использовать ее таким же образом?

$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

Как передать массив в функцию, не переписывая массив в саму функцию.

Любое объяснение будет оценено спасибо

Ответы [ 3 ]

4 голосов
/ 01 мая 2009

скрипт № 1 неверен. он также не работает (функция ** $ ** test () {...}) и не выдает «1». и глобалы являются плохой практикой. упаковка их в класс не имеет к этому никакого отношения. классы не являются решением случайных задач, не связанных с ориентацией объекта.

просто передайте $ a в качестве параметра:

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

  test($a);
  // -> "number 1". 
 ?>

скрипт № 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));
?>
3 голосов
/ 01 мая 2009

Ваш первый пример не должен выводить 1. Единственный способ сделать переменные глобальными в определенной функции - это использовать ключевое слово global следующим образом:

function test() {
    global $a;
    echo $a;
}

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

Подробнее здесь: http://ca2.php.net/manual/en/language.variables.scope.php

0 голосов
/ 01 мая 2009

PHP не имеет неявной глобальной области видимости; Вы должны использовать ключевое слово global для доступа к "глобальным" переменным.

$ вывод 1, вероятно, из-за запутанной сомнительной обработки переменных в PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...