首页 > 语言 > 关键词  > php最新资讯  > 正文

教你在PHP中使用全局变量

2009-01-23 11:55 · 稿源:51CTO.com

即使开发一个新的大型PHP程序,你也不可避免的要使用到全局数据,因为有些数据是需要用到你的代码的不同部分的。一些常见的全局数据有:程序设定类、数据库连接类、用户资料等等。有很多方法能够使这些数据成为全局数据,其中最常用的就是使用“global”关键字申明,稍后在文章中我们会具体的讲解到。

使用“global”关键字来申明全局数据的唯一缺点就是它事实上是一种非常差的编程方式,而且经常在其后导致程序中出现更大的问题,因为全局数据把你代码中原本单独的代码段都联系在一起了,这样的后果就是如果你改变其中的某一部分代码,可能就会导致其他部分出错。所以如果你的代码中有很多全局的变量,那么你的整个程序必然是难以维护的。

本文将展示如何通过不同的技术或者设计模式来防止这种全局变量问题。当然,首先让我们看看如何使用“global”关键字来进行全局数据以及它是如何工作的。使用全局变量和“global”关键字

PHP默认定义了一些“超级全局(Superglobals)”变量,这些变量自动全局化,而且能够在程序的任何地方中调用,比如$_GET和$_REQUEST等等。它们通常都来自数据或者其他外部数据,使用这些变量通常是不会产生问题的,因为他们基本上是不可写的。

但是你可以使用你自己的全局变量。使用关键字“global”你就可以把全局数据导入到一个函数的局部范围内。如果你不明白“变量使用范围”,请你自己参考PHP手册上的相关说明。

下面是一个使用“global”关键字的演示例子:

以下为引用的内容:

以下为引用的内容:

<?php

$my_var = 'Hello World';

test_global();

function test_global() {

// Now in local scope

// the $my_var variable doesn't exist

// Produces error: "Undefined variable: my_var"

echo $my_var;

// Now let's important the variable

global $my_var;

// Works:

echo $my_var;

}

?>

正如你在上面的例子中看到的一样,“global”关键字是用来导入全局变量的。看起来它工作的很好,而且很简单,那么为什么我们还要担心使用“global”关键字来定义全局数据呢?

下面是三个很好的理由:

1、 代码重用几乎是不可能的

如果一个函数依赖于全局变量,那么想在不同的环境中使用这个函数几乎是不可能的。另外一个问题就是你不能提取出这个函数,然后在其他的代码中使用。

2、 调试并解决问题是非常困难的

跟踪一个全局变量比跟踪一个非全局变量困难的多。一个全局变量可能会在一些不明显的包含文件中被重新定义,即使你有一个非常好的程序编辑器(或者IDE)来帮助你,你也得花了几个小时才能发现这个问题所在。

3、 理解这些代码将是非常难的事情

你很难弄清楚一个全局变量是从哪里来得,它是用来做什么的。在开发的过程中,你可能会知道知道每一个全局变量,但大概一年之后,你可能会忘记其中至少一般的全局变量,这个时候你会为自己使用那么多全局变量而懊悔不已。
那么如果我们不使用全局变量,我们该使用什么呢?下面让我们看看一些解决方案。

使用函数参数

停止使用全局变量的一种方法就是简单的把变量作为函数的参数传递过去,如同下面所示:

以下为引用的内容:

以下为引用的内容:

<?php

$var = 'Hello World';

test ($var);

function test($var) {

echo $var;
}

?>

如果你仅仅只需要传递一个全局变量,那么这是一种非常优秀甚至可以说是杰出的解决方案,但是如果你要传递很多个值,那该怎么办呢?

比如说,假如我们要使用一个数据库类,一个程序设置类和一个用户类。在我们代码中,这三个类在所有组件中都要用到,所以必须传递给每一个组件。如果我们使用函数参数的方法,我们不得不这样:

以下为引用的内容:

以下为引用的内容:

<?php

$db = new DBConnection;

$settings = new Settings_XML;

$user = new User;

test($db, $settings, $user);

function test(&$db, &$settings, &$user) {

// Do something

}

?>

显然,这是不值得的,而且一旦我们有新的对象需要加入,我们不得不为每一个函数增加多一个函数参数。因此我们需要用采用另外一种方式来解决。

举报

  • 相关推荐
  • iPhone 17全系手机膜曝光:Air屏幕尺寸介于Pro和Pro Max之间

    近日,海外数码媒体披露了一组疑似iPhone 17 系列屏幕保护贴膜的照片,首次展现了即将发布的iPhone 17 Air与其他型号的屏幕尺寸差异。 根据图片显示,iPhone 17 Air手机的屏幕尺寸介于iPhone 17 Pro与iPhone 17 Pro Max之间,画面排列顺序依次为:iPhone 17、iPhone 17 Pro、iPhone 17 Air,最后是iPhone 17 Pro Max。 依据目前的传闻,iPhone 17 Air可能搭载OLED屏幕,预计对角线尺寸为约6.6英寸,部分消息�

  • 苹果iPhone 17全系涨价没跑了!

    投资机构GF Securities的首席分析师JeffPu称,iPhone 17全系机型都将涨价,包括在美国。 这与近段时间很多分析师的意见相同,目前来看iPhone 17涨价已经基本成为定局。 iPhone 17可能涨价的主要原因是关税,华尔街分析师预计,iPhone 17系列机型的价格可能会比相应的iPhone 16机型高出50美元至100美元。 不过,即使价格真的上涨,苹果也可能会想出巧妙的办法来应对这种情况,比如将iP

  • 贝昂发起空气净化器行业PK局:输了全平台下架,100天直播实测

    2025年8月5日,贝昂智能科技总经理胡加明博士发布《贝昂单挑整个空气净化器行业?》宣言视频,向全行业发起"三项指标"挑战:在100天同等实验条件下,对比CADR值衰减率、病毒细菌杀灭率、CCM(滤网寿命)三项核心指标。若贝昂任意一项指标输给对手,相关产品将立即下架。胡加明指出当前行业存在三大问题:1)传统HEPA滤网机型性能衰减快,而贝昂采用可水洗静电集尘技术;2)HEPA无法过滤30-60纳米病毒;3)国标P4级CCM标准过低。为确保公正,提出"四重监督"机制。挑战规则对"友商"更宽松:贝昂输一项即全输,对手只需赢一项即胜。即日起接受线上线下报名应战。胡加明表示此举旨在揭露行业营销噪音,让真实数据说话,推动行业从价格战转向性能竞争,让消费者每一分钱都物有所值。

  • 真我新机撞脸iPhone 17 Pro:镜头排布一模一样

    博主数码闲聊站曝光了真我新机,该机采用横向大矩阵DECO,摄像头排布跟即将发布的iPhone 17 Pro一模一样。该博主爆料,真我将会抢先苹果发布这款新品。 如图所示,真我新机的三摄布局跟iPhone 17 Pro一致,唯一区别是iPhone 17 Pro相机右侧配备LIDAR激光雷达扫描仪,真我没有这项配置。 另外,渲染图显示真我新品搭载骁龙7 Gen4平台,这意味着该机是一款中端产品。

  • iPhone 17 Pro橙色机模曝光 全系所有配色揭晓

    ​近日,知名科技博主Sonny Dickson提前晒出iPhone17系列四款机型全配色方案及核心设计细节。据披露,该系列在延续经典黑白基调的同时,首次引入多款鲜明配色:iPhone17Pro系列提供黑、白、蓝、橙四色,其中橙色以高饱和度成为最抢眼选项;iPhone17Air推出黑、白、浅金、天蓝四款清新配色;标准版iPhone17则包含黑、白、浅蓝及粉色,满足多元化审美需求。 工业设计层面,iPhone17系列�

  • iPhone17Pro最新外观曝光:苹果调整天线布局

    ​近日,有博主在社交平台分享了iPhone 17 Pro的全新渲染图,引发科技圈广泛关注。此次苹果对iPhone 17 Pro的天线布局进行了重新设计,有望为用户带来更出色的信号体验。 从渲染图可以清晰看到,iPhone 17 Pro的天线布局与以往机型有明显不同。除了金属中框上保留天线条外,其矩阵相机模组也环绕了一圈天线条。这样的设计并非随意为之,而是有着实际意义。当用户握持设备时

  • iPhone 18 Pro首发!苹果最强基带曝光

    上个月微软面向商业客户推出了Surface Laptop 5G版本,它支持Nano SIM卡和eSIM两种方式,还可作为热点为其他设备提供网络。在Surface Laptop推出5G之际,苹果也在着手准备5G版Mac设备。 苹果记者Mark Gurman爆料,苹果最快会在2026年在Mac电脑上配备自研5G基带芯片,这将是苹果史上首款支持5G网络的Mac设备。 据悉,2026年的Mac电脑将搭载苹果新一代基带芯片C2,这颗基带由iPhone 18 Pro率先搭

  • 曝iPhone 18相机巨变:首发三星全新图像传感器

    据媒体报道,三星在得克萨斯州的一家工厂为即将推出的iPhone生产下一代图像传感器芯片,这标志着三星将会打破索尼在果链一家独大的局面,是苹果历史上的一次重大转变。 爆料称这颗芯片是三层堆叠图像传感器,通过垂直堆叠多个传感器层,能实现更高的像素密度和更出色的暗光性能,堆叠传感器架构还能提高读取速度、降低功耗并提升动态范围,这种制造工艺尚未实现

  • 成本、效率差距太大!苹果短期不会在美国生产iPhone

    特朗普关税战的最重要目的之一,就是逼制造业回流,其中iPhone在美国生产一事也引发关注。 对此,名记马克古尔曼表示了自己的看法:正如我之前多次强调的,至少在短期内,苹果绝无可能在美国启动iPhone大规模量产。” 他强调,从成本、规模及工程角度看,这在目前都是不现实的。即便是在印度,苹果也耗费了近十年时间才刚刚能生产出一定比例的iPhone。 另外,未来�

  • 苹果最薄手机要火:王腾想买iPhone 17 Air

    今年9月苹果将发布iPhone 17系列,除了常规的iPhone 17、iPhone 17 Pro和iPhone 17 Pro Max之外,苹果还将带来全新的iPhone 17 Air,定位轻薄,它将替代Plus成为苹果的新系列,这是史上最薄苹果手机。 博主数码闲聊站爆料,iPhone 17 Air做了双面冷雕工艺,主要是为了减薄,电池差不多就3000mAh,机身厚度是5.Xmm,接下来就等苹果验证看看超轻薄是不是第一生产力。 对于iPhone 17 Air,REDMI总经理