Не работает вызов функции PHP - предполагаемая проблема приведения? - PullRequest
0 голосов
/ 08 августа 2010

Почему ЭТО не работает при вызове, например, через wd (1) (оно всегда возвращает '-2')?

$zoom=$user['zoom'];
function wd($hrs){
  return $hrs*$zoom-2;
}

Но ЭТО работает нормально:

function wd($hrs){
  return $hrs*30-2;
}

Предполагается,это была проблема с кастингом, я пробовал всевозможные варианты, например

(int)$hrs * ((int)$zoom)

или

(int)$hrs * (float)$zoom

, но безуспешно: (

Любая помощь приветствуется.

(И кстати, имеет ли значение, находится ли функция внутри

include('header.php')

- хотя я пробовал это как внутри, так и за пределами заголовка?)

Ответы [ 3 ]

3 голосов
/ 08 августа 2010

РЕДАКТИРОВАТЬ: Вы должны передать эту переменную в качестве аргумента функции, но если вам абсолютно необходимо сохранить глобальную переменную, выполните следующее.

Вам необходимо вывести глобальный охват:

$zoom=$user['zoom'];
function wd($hrs){
  global $zoom;
  return $hrs*$zoom-2;
}
1 голос
/ 08 августа 2010

Это не проблема приведения - это потому, что вы пытаетесь использовать переменную, которая выходит за рамки .

Хотя вам необходимо прочитать документы PHP дляполностью вниз, на базовом уровне, вы можете получить доступ только к переменным, которые определены в той же функции или методе.(Хотя вы можете использовать ключевое слово global для доступа к глобальным переменным. При этом глобальные переменные не идеальны.)

Таким образом, вы можете просто обновить свою функцию, чтобы она также передавала 'zoom 'в качестве параметра следующим образом:

function wd($hrs, $zoom){
  return $hrs*$zoom-2;
}
0 голосов
/ 08 августа 2010
$zoom=$user['zoom'];
function wd($hrs){
  // there is no variable $zoom within the function's visibility scope
  // so you will get a "Notice: undefined variable 'zoom'" here.
  return $hrs*$zoom-2;
}

см. http://docs.php.net/language.variables.scope

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