Проблема с массивом внутри функции - PullRequest
1 голос
/ 08 марта 2011

у меня есть:

<?php
$a=array('x'=>3,'y'=>6,'z'=>12);  //NOTE THIS*** position 1
echo func(5);

function func($c)
{
  $a = array('x'=>3,'y'=>6,'z'=>12);  //NOTE THIS*** position 2
  $previous = null;
  foreach($a as $k => $v)
  {
     if($v > $c) // This part was unclear, so it could be >= instead
     {
        return $previous;
     }
     $previous = $k;
  }
  return $previous;
}

Теперь, когда у меня есть массив $ a внутри функции (позиция 2), он отлично работает. Однако, когда я помещаю $ a вне функции (позиция 1), она не работает.

Почему это?

Ответы [ 4 ]

2 голосов
/ 08 марта 2011

Это связано с переменной областью в PHP.Вы можете проверить это здесь: http://php.net/manual/en/language.variables.scope.php

Объявление $ a в позиции 1 делает его глобальным.Чтобы получить к нему доступ, вам нужно использовать ключевое слово global: global $a;

2 голосов
/ 08 марта 2011

Функции могут обращаться только к данным в своей области.

$ a, определенный в первой позиции, находится в глобальной области видимости, если вы хотите получить к нему доступ в функции, вам нужно передать ее в качестве аргумента функции.

Или вы можете добавить строку в функцию

global $a;

Что приводит $ a к текущей области из глобальной области.

Прочитайте Область действия переменной из документации PHP.

1 голос
/ 08 марта 2011

$a в первой позиции находится вне области видимости. Функция не имеет доступа к переменным, объявленным вне ее, если только она не передана в качестве параметра.

См. Область действия переменной PHP .

Вы можете предоставить доступ к функции через ключевое слово global:

$a = array();

function myFunc() {
   global $a;
   // do something with $a here
}

... но обратите внимание, что использование глобальных переменных, как правило, считается плохой практикой и не одобряется .

0 голосов
/ 08 марта 2011

PHP не может использовать глобальные переменные внутри функций, если вы не объявите их:

function func($c)
{
  global $a;
  # The rest of the code.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...