-2

听起来可能很傻,但我的 php 已经过时/缺乏经验,并且从 Java 编程回到 php,所以我混淆了这些概念。

如果在 php 网页中我声明一个变量

$debug=TRUE;

并尝试从下面的函数中访问它

a(){
    if ($debug){
    echo "I'm here";
    }
}

变量不存在或未启动?整个文件很简单:

<?php
$debug=TRUE;
a(){
    if ($debug){
        echo "I'm here";
    }
}
?>

我需要制作一个会话变量或其他东西吗?我很无知,同样的概念让我在使用其他变量时感到困惑。同样为了进一步使用变量,我试图被迫将我需要的所有变量传递给我使用它们的函数,而 Java 中的类概念可能会更干净,但对于这种简单性来说有点太多了. 或者我是否需要将函数(它是一个表单处理器)声明为一个类?

我知道这很愚蠢,但我浏览了谷歌和论坛,问题似乎如此明显和简单,以至于很难找到针对此的网页或条目(或者我可能问错了问题)。

4

4 回答 4

3

http://php.net/manual/en/language.variables.scope.php

<?php
$debug = TRUE;

function a() {
    global $debug;
    if($debug === TRUE) {
         echo "I'm here....\n"
    }
}

更好的是,您可以将其作为参数传入,而不是使用全局变量:

<?php
$debug = TRUE;

function a($debug = TRUE) {
  if($debug === TRUE) ....
}    

您还可以使用 $_GLOBALS 数组:

<?php
$debug = TRUE;

function a() {
   if($_GLOBALS['debug'] === TRUE) ...
}

您可以使用始终在范围内的常量:

<?php
define('DEBUG', TRUE);

function a() {
  if(DEBUG === TRUE) ...
}

您还可以使用单例:

function a() {
    if(SingletonClass::get_instance()->debug === TRUE) {
        ...
    }
}

您必须创建一个扩展 StdClass() 的单例类以获取隐式 ->get 和 ->set 方法。

http://www.talkphp.com/advanced-php-programming/1304-how-use-singleton-design-pattern.html

于 2012-08-20T00:21:22.157 回答
2

你想要这样的东西吗:

<?php
$debug=TRUE;
function a($debug){
  if ($debug){
    echo "I'm here";
  }
}

a($debug);//outputs "I'm here"
?>
于 2012-08-20T00:16:54.807 回答
2

这里的一些东西 a(){} 没有被定义为一个函数

function a(){

}  

接下来,除非你绝对想要它们,否则你不应该尝试使用全局变量。但是,你可以

$debug = TRUE;
function a(){
global $debug;
if($debug)
{
echo "it is";
}
}  

然后在您想检查时调用 a() 。

我必须说,我认为这不是您尝试调试的好习惯。

于 2012-08-20T00:24:42.447 回答
1

将变量传递给函数,如下所示:

$debug = true;
function a($debug) {
    var_dump($debug);
}
a($debug);
// Outputs bool(true)
于 2012-08-20T00:47:03.430 回答