用PHP初始化全局变量

时间:2009-07-23 11:03:17

标签: php variables global initialization

在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;
};

现在注意到它。

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

6 个答案:

答案 0 :(得分:4)

在第二个例子中,你仍然没有声明变量,即行

$alert;

不会为$alert分配一个值,因此它仍未声明。

如果您首先声明变量,则可以更轻松地访问变量而不会生成通知:

$alert = '';

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

答案 1 :(得分:2)

  

初始化a是一种好习惯   PHP中的全局变量?

在我看来(而且我不是唯一一个想到的)不使用全局变量是一种好习惯。

您可以找到几个参数here

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

答案 2 :(得分:1)

好吧,使用一个尚未初始化的变量会在php中触发通知,因此初始化变量总是比不初始化变量更好。

答案 3 :(得分:1)

不要使用全局变量,这是一个不好的例子,在PHP6中不可用。如果您需要跨页/类可用的值,为什么不创建枚举类?请在此处查看示例:http://riccardotacconi.blogspot.com/2009/05/enumerator-class-in-php.html

基本上你包括你的类,你就会以这种方式获得价值:QYourClass :: Alert

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

我认为这不可行,所以我要废弃它。全局变量在PHP6中被删除,而Constant则根据定义不能更改它的值。感谢大家,我感谢每一个答案和所有贡献者。