PHP函数调用无法正常工作 - 推测投射问题?

时间:2010-08-08 17:20:40

标签: php function casting scope

为什么通过例如调用时无效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 个答案:

答案 0 :(得分:3)

编辑:您应该将该变量作为参数传递给函数,但如果您绝对需要将变量保持为全局,请执行以下操作。

您需要将全局纳入范围:

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

答案 1 :(得分:1)

这不是投射问题 - 因为您正在尝试使用out of scope的变量。

虽然您需要在完整的低位读取PHP文档,但在基本级别,您只能访问在同一函数或方法中定义的变量。 (尽管您可以使用global关键字来访问全局变量。也就是说,全局变量不太理想。)

因此,你可以简单地更新你的函数,也可以将'zoom'作为参数传递,如下所示:

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

答案 2 :(得分:0)

$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