PHP变量入门教程(3)global 关键字

global关键字

首先,一个使用 global 的例子:

使用 global

<?php
$a = 1;
$b = 2;

function Sum()
{
   global $a, $b;

   $b = $a + $b;
}

Sum();
echo $b;
?>

以上脚本的输出将是 "3"。在函数中申明了全局变量 $a 和 $b,任何变量的所有引用变量都会指向到全局变量。对于一个函数能够申明的全局变量的最大个数,PHP 没有限制。

在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组。前面的例子可以写成:

使用 $GLOBALS 替代 global

<?php
$a = 1;
$b = 2;

function Sum()
{
   $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}

Sum();
echo $b;
?> 

在 $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。以下范例显示了超全局变量的用处:

演示超全局变量和作用域的例子

<?php
function test_global()
{
   // 大多数的预定义变量并不 "super",它们需要用 ‘global‘ 关键字来使它们在函数的本地区域中有效。
   global $HTTP_POST_VARS;

   print $HTTP_POST_VARS[‘name‘];

   // Superglobals 在任何范围内都有效,它们并不需要 ‘global‘ 声明。Superglobals 是在 PHP 4.1.0 引入的。
   print $_POST[‘name‘];
}
?>

使用静态变量

变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。看看下面的例子:

演示需要静态变量的例子

<?php
function Test ()
{
   $a = 0;
   echo $a;
   $a++;
}
?>

本函数没什么用处,因为每次调用时都会将 $a 的值设为 0 并输出 "0"。将变量加一的 $a++ 没有作用,因为一旦退出本函数则变量 $a 就不存在了。要写一个不会丢失本次计数值的计数函数,要将变量 $a 定义为静态的:

使用静态变量的例子

<?php
function Test()
{
   static $a = 0;
   echo $a;
   $a++;
}
?>

现在,每次调用 Test() 函数都会输出 $a 的值并加一。

静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来中止递归。一下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止:

静态变量与递归函数

<?php
function Test()
{
   static $count = 0;

   $count++;
   echo $count;
   if ($count < 10) {
       Test ();
   }
   $count--;
}
?>

: 静态变量可以按照上面的例子声明。如果在声明中用表达式的结果对其赋值会导致解析错误。

声明静态变量

<?php
function foo(){
   static $int = 0;          // correct
   static $int = 1+2;        // wrong  (as it is an expression)
   static $int = sqrt(121);  // wrong  (as it is an expression too)

   $int++;
   echo $int;
}
?>
时间: 2024-07-31 03:34:05

PHP变量入门教程(3)global 关键字的相关文章

PHP变量入门教程(2)超全局变量,总共9个

PHP 超全局变量 $GLOBALS 包含一个引用指向每个当前脚本的全局范围内有效的变量.该数组的键标为全局变量的 名称.从 PHP 3 开始存在 $GLOBALS 数组. $_SERVER 变量由 Web 服务器设定或者直接与当前脚本的执行环境相关联.类似于旧数组 $HTTP_SERVER_VARS 数组(依然有效,但反对使用). $_GET 经由 HTTP GET 方法提交至脚本的变量.类似于旧数组 $HTTP_GET_VARS 数组(依然有效,但反对使用). $_POST 经由 HTTP

PHP变量入门教程(1)基础

基础 PHP 中一个美元符号后面跟上一个变量名称,即表示一个变量.变量的名称是对大小写敏感的. 变量名与 PHP 中其它的标签一样遵循相同的规则.一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线.按照正常的正则表达式,它将被表述为:'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' 注: 字母为 a-z,A-Z,ASCII 字符从 127 到 255(0x7f-0xff). <?php $var = "Bob"; $

PHP变量入门教程(4)PHP 的外部变量

PHP 的外部变量 HTML 表单(GET 和 POST) 当一个表单体交给 PHP 脚本时,表单中的信息会自动在脚本中可用.有很多方法访问此信息,例如: 一个简单的 HTML 表单 <form action="foo.php" method="POST"> Name: <input type="text" name="username"> Email: <input type="tex

BootStrap入门教程 (一) :手脚架Scaffolding(全局样式(Global Style),格网系统(Grid System),流式格网(Fluid grid System),自定义(Customing),布局(Layouts))

2011年,twitter的“一小撮”工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端工具集--BootStrap.Bootstrap由MARK OTTO和Jacob Thornton所设计和建立,在github上开源之后,迅速成为该站上最多人watch&fork的项目.大量工程师踊跃为该项目贡献代码,社区惊人地活跃,代码版本进化非常快速,官方文档质量极其高(可以说是优雅),同时涌现了许多基于Bootstrap建设的网站:界面清新.简洁;要素

飘逸的python - 为什么修改全局的dict变量不用global关键字

比如下面这段代码 s = 'foo' d = {'a':1} def f(): s = 'bar' d['b'] = 2 f() print s print d 为什么修改字典d的值不用global关键字先声明呢? 这是因为, 在s = 'bar'这句中,它是"有歧义的",因为它既可以是表示引用全局变量s,也可以是创建一个新的局部变量,所以在python中,默认它的行为是创建局部变量,除非显式声明global. 在d['b']=2这句中,它是"明确的",因为如果把d

【python】为什么修改全局的dict变量不用global关键字

转自:http://my.oschina.net/leejun2005/blog/145911?fromerr=qnPCgI19#OSC_h4_8 为什么修改字典d的值不用global关键字先声明呢? s = 'foo' d = {'a':1} def f(): s = 'bar' d['b'] = 2 f() print s # foo print d # {'a': 1, 'b': 2} 这是因为,在s = 'bar'这句中,它是“有歧义的“,因为它既可以是表示引用全局变量s,也可以是创建一

PHP 闭包获取外部变量和global关键字声明变量的区别

最近在学习workerman的时候比较频繁的接触到回调函数,使用中经常会因为worker的使用方式不同,会用这两种不同的方式去调用外部的worker变量,这里就整理一下PHP闭包获取外部变量和global关键字声明变量的区别. 闭包 闭包是一个常见的概念,我们通常可以将其与回调函数配合使用,可以使代码更加简洁易读. 闭包可以通过拷贝的方式让函数使用父作用域中的变量.如: $global = 'hello'; $bbb = function()use($global){ echo $global.

Batch入门教程丨第二章:认识变量相关概念

在前两期的学习内容中,我们已经了解了Batch入门教程有关的知识和编程方法,如何编写和运行Windows Batch程序,脚本语言的入门方式等,今天我们将继续深入学习Batch入门教程之认识变量相关概念. 前期回顾  ?Batch入门教程丨部署与Hello World(上) ?Batch入门教程丨部署与Hello World(下) 进阶 我们在之前所接触到的三个指令仅仅是Batch中的冰山一角,一些比较重点的指令都会放在本节中进行讲述.在进阶内容中,您将会了解到变量.逻辑判断.调用与传参和函数这

Python10分钟入门教程,Python入门神图一张

这篇文章主要介绍了Python 10分钟入门教程,分享一张Python入门神图一张,具有一定的参考价值,感兴趣的小伙伴们可以参考一下| 初试牛刀 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手册(CheatSheet)之间,因此只会包含一些基本概念.很显然,如果你希望真正学好一门语言,你还是需要亲自动手实践的.在此,我会假定你已经有了一定的编程基础,因此我会跳过大部分