在PHP中初始化全局变量

在PHP中初始化全局变量,php,variables,global,initialization,Php,Variables,Global,Initialization,在PHP中初始化全局变量是一种好的做法吗?代码片段似乎工作得很好,但是(在一个更大的项目中,比如为了性能起见)在函数外部初始化变量是否更好,比如在代码的第二个草稿中 if(isset($_POST["Return"]))Validate(); function Validate(){ (!empty($_POST["From"])&&!empty($_POST["Body"]))?Send_Email():Fuss(); }; function Send_Email(){

在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,使用未初始化的变量会在php中触发通知,因此初始化变量总是比不初始化好

初始化一个 PHP中的全局变量

在我看来(我不是唯一一个这样认为的人),最好不要使用全局变量

你可以找到几个论点


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

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

$alert;
不分配
$alert
值,因此它保持未声明状态

如果先声明变量,则可以更轻松地访问它,而无需生成通知:

$alert = '';

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

不要使用全局变量,这是一个错误的部分,在PHP6中不可用。如果需要跨页面/类可用的值,为什么不创建枚举类?请参见此处的示例:


基本上,你包括你的类,并且你通过以下方式获得值:QYourClass::Alert

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

根据PHP6,全局变量并没有被废除,而是注册全局变量。全局变量有很多用途(有些是良好的实践,有些不是),并且基本上是安全的。是一个严重的安全漏洞,已被正确地弃用。

首先,感谢大家的快速回复!无论$Alert是否存在,我都不会收到通知。那么,当PHP看到它的第一个实例、全局或其他(在第一个代码段中,即第6行)时,变量是否初始化?您可能没有看到通知,因为您没有打开它们,您可以更改PHP.ini以启用它们,或者使用以下命令:error\u reporting(E\u ALL);错误报告的默认值会随着PHP版本的不同而变化(我想!)。但最好将其设置为E_ALL,因为您会更清楚自己的编程错误。正如建议的那样,我已经在我们已有的代码下面添加了简短的代码片段,即使如此,我仍然看不到任何错误!错误报告(E_全部);ini设置(“显示错误”,1);此外,错误报告(E|ALL | E|u STRICT)是最详细的错误级别。当然,我也尝试过STRICT,但仍然没有看到任何错误。即使上传到远程服务器,我也没有看到任何错误!我需要它是全局的,因为每次加载页面时都会调用Alert(),如果$Alert为null,则不会在页面中回显任何警报。isset不是一个好方法,全局函数会及时执行,因此,全局变量上的isset通常返回null,因为这是它们的数组位置的初始化方式。常量的值在运行时不能像定义的全局变量那样设置。不管怎样,谢谢你的回答。对于那些在谷歌上搜索的人来说,PHP6从来没有发生过,PHP7仍然包含$GLOBALS。这个答案不适合使用。你的答案不是。你应该把功劳归功于帮助过你的人,如果有的话。否则,不要选择你的答案,因为我已经在上面的某个地方读过了。