2009-07-23 157 views
2

在PHP中初始化全局变量是否是一种好的做法?代码片段似乎工作正常,但是更好地初始化(在一个更大的项目中,出于性能考虑)函数之外的变量,比如第二次代码中的变量?使用PHP初始化全局变量

if(isset($_POST["Return"]))Validate(); 
function Validate(){ 
    (!empty($_POST["From"])&&!empty($_POST["Body"]))?Send_Email():Fuss(); 
}; 
function Send_Email(){ 
    global $Alert; 
    $Alert="Lorem Ipsum"; 
    mail("","",$_POST["Body"],"From:".$_POST["From"]); 
}; 
function Fuss(){ 
    global $Alert; 
    $Alert="Dolor Sit" 
}; 

function Alert(){ 
    global $Alert; 
    if(!is_null($Alert))echo $Alert; 
}; 

注意上面的变量$ Alert没有被初始化。

$Alert; 
if(isset($_POST["Return"]))Validate(); 
function Validate(){ 
    (!empty($_POST["From"])&&!empty($_POST["Body"]))?Send_Email():Fuss(); 
}; 
function Send_Email(){ 
    global $Alert; 
    $Alert="Lorem Ipsum"; 
    mail("","",$_POST["Body"],"From:".$_POST["From"]); 
}; 
function Fuss(){ 
    global $Alert; 
    $Alert="Dolor Sit" 
}; 

function Alert(){ 
    global $Alert; 
    if(!is_null($Alert))echo $Alert; 
}; 

现在注意到了。

我感谢任何答案!在此先感谢,杰伊

回答

-1

我不认为这是可行的,所以我杀了。全局变量在PHP6和常量中被删除,根据定义,它不能改变它的值。感谢大家,我感谢每个答案和所有贡献者。

1

那么,使用尚未初始化的变量将在PHP中触发通知,所以初始化变量始终比不初始化它们更好。

+0

首先,感谢大家的快速回复! 无论$ Alert是否存在,我都不会收到通知。那么,当PHP看到它是第一个实例,全局或其他(在第一个片段,即:第6行)的初始化变量? – Jay 2009-07-23 11:24:21

+0

您可能没有看到通知,因为您尚未打开它们,您可以更改php.ini以启用它们,也可以使用以下命令: error_reporting(E_ALL); error_reporting的默认值会随PHP的不同版本而变化(我想!)。但最好将它设置为E_ALL,因为您会更清楚自己的编程错误。 – Vex 2009-07-23 11:43:11

+0

建议我已经在我们已经有的东西下面添加了一小段代码,尽管如此我仍然没有看到任何错误! error_reporting(E_ALL); ini_set(“display_errors”,1); – Jay 2009-07-23 11:57:29

2

在PHP中初始化一个 全局变量是不是很好的做法?

在我看来(我不是唯一的一个思想,),这是很好的做法,不使用全局变量。

你可以找到几个参数here

如果你确实需要使用全局变量,那么初始化它们可能会更好;或使用isset来确定它们是否已被使用。

3

在第二个例子你还在不声明变量,行

$alert; 

所以它仍然未申报不分配$alert的值。

如果先声明变量,可以更方便地访问它,而不会产生通告:

$alert = ''; 

if ($alert) { 
    //do something with alert 
} 
0

根据this page全局变量不会在PHP6中被废除,而是注册全局变量。全局变量有许多用途(一些是好的做法,一些不是),基本上是安全的。 Register globals是一个严重的安全漏洞,已被正确弃用。