来源:www.cncfan.com | 2006-1-11 | (有1856人读过)

就像大部份的结构化程序,有所谓的全局变量与局部变量,PHP 在这方面也是有相似之处。

在 PHP 的程序执行时,系统会在内存中保留一块全局变量的区域。实际运用时,可以透过 $GLOBALS["变量名称"] 将需要的变量取出。在用户自定的函数或程序中,就可以用 $GLOBALS 数组取出需要的变量。当然别忘了 PHP 的变量是区分大小写的,搞错了大小写可是叫一百年,变量也不会出来。

$GLOBALS 数组是 PHP 程序中比较特殊的变量,不必定义,系统会自动匹配相关的变量在里面。在函数中,也不必管 $GLOBALS 数组是否已经做全局定义,就可以直接使用了。

和 $GLOBALS 变量类似的还有 $php_errormsg 字符串变量。若 PHP 的配置文件 (php.ini/php3.ini) 中的 track_errors 选项打开的话,会有全局变量 $php_errormsg 可以看到错误的信息。

在 PHP 中,全局变量的有效范围 (scope) 仅限于主要程序中,不会影响到函数中同名的变量,也就是全局变量与局部变量互不侵犯。若要变量能通透到函数中,就要用到 $GLOBALS 数组或是使用 global 定义。

例如,在自行开发的函数中,要取得目前执行 PHP 程序页面的文件名,就可以用 $GLOBALS["PHP_SELF"] 取出 $PHP_SELF 的值。

// 本程序使用 $GLOBALS 数组

function myfunc() {

echo $GLOBALS["PHP_SELF"];

}

myfunc();

?>

下面是错误的示范,请勿模仿,上面的才是正确的示范。

// 这是错误的示范

function errfunc() {

echo $PHP_SELF;

}

errfunc();

?>

但是这个错误的示范要是改成下例就没问题了

// 本程序使用全局定义

function myfunc() {

global $PHP_SELF;

echo $PHP_SELF;

}

myfunc();

?>

在变量前面加上 global 的名称,就是定义该变量为全局变量。用这种方式,就不需使用 $GLOBALS 数组,也能让变量进入自行开发的函数中。

接下来先看静态变量的例子

// 静态变量的例子

function myfunc() {

static $mystr;

$mystr.="哈";

echo $mystr."
\n";

}

myfunc(); // 哈

myfunc(); // 哈哈

myfunc(); // 哈哈哈

?>

函数在执行时所产生的变量,在函数结束时就消失了,有时因为程序的需要,函数在循环中,当不希望变量在每次执行完函数就消失的话,静态变量 (static variable) 就派上用场了。上例中,使用 $mystr 变量之前,先在变量前面加上 static,即表示变量 $mystr 是静态变量,当每次执行 myfunc() 函数时,$mystr 的值会一直增加,每执行一次就多一个哈字。若将 static 的静态变量定义拿掉,就没办法累加哈字了。

// 不是静态变量的例子 (错误的)

function myfunc() {

$mystr.="哈";

echo $mystr."
\n";

}

myfunc(); // 哈

myfunc(); // 哈

myfunc(); // 哈

?>

再看一个比较实际的例子,它是处理表格的颜色,让隔行的颜色不同。

function TdBackColor() {

static $ColorStr;

if ($ColorStr=="808080") {

$ColorStr="c0c0c0";

} else {

$ColorStr="808080";

}

return($ColorStr);

}

echo "

for ($i=0; $i<10; $i++) {

$ColorStr=TdBackColor();

echo "

这是第".$i."行\n";

}

echo "

";

?>

PHP 的变量使用技巧上,最令人觉得不可思议的则是变量的变量 (variable variable)。这是充分利用 PHP 特性玩出的特殊技巧

$a = "Hello";

$$a = "world";

echo "$a, $hello"; // Hello, world

echo "$a, {$a}"; // 也是 Hello, world

?>

mdean@kcnet.com 举出一个更绝的例子 (24-Apr-1999),他称为变量的函数 (variable function)

function myCallbackFunction()

{

print("Hello from callback");

}

function myFunction($callback)

{

$callback();

}

// call to myFunction passing callback

// function as parameter

myFunction("myCallbackFunction");

?>

至于用户在 FORM 中输入的资料,要怎么处理呢?要是在 PHP 的配置文件中,track_vars 设为 On 时,直接使用变量名字就好了。如下例,next.php 在执行时,系统会自动产生两个变量 $username 及 $sex,直接使用就好了,比起传统的 CGI 要自己解析,PHP 实在是太神奇了。

姓名:

性别:

由于 PHP 许多语法都是 C 语言的翻版,故 PHP 在使用变量时,随时都可以使用新的变量,只要在使用前将变量初始化就好了,不必像 Pascal 语言那样严谨,所有要使用的变量都要事先定义。这当然有好处与坏处:好处是使用方便、自由;坏处就是常常因这些自由而付出相当大的代价调试。在程序码短的 PHP 程序当然不成问题,当程序在数百数千行,甚至 include 或 require 好几层之后,问题就浮现出来了。无论如何,保持良好的写作习惯才是避免浪费青春的方法。

php变量使用,php变量的使用相关推荐

  1. 浅显易懂 Makefile 入门 (02)— 普通变量和自动变量定义、使用($@、$^、$< 作用)、变量覆盖 override、变量的来源 origin

    1. 变量的定义 Makefile 文件中定义变量的基本语法如下: 变量的名称=值列表 变量的名称可以由大小写字母.阿拉伯数字和下划线构成.等号左右的空白符没有明确的要求,因为在执行 make 的时候 ...

  2. Go 学习笔记(6)— 变量定义、变量声明、变量作用域

    1. 变量定义 Go 语言变量名由字母.数字.下划线组成,其中首个字符不能为数字.声明变量的一般形式是使用 var 关键字: var varName dataType [= value] Go 语言和 ...

  3. 用户变量和系统变量的区别

    用户变量和系统变量的区别 1. 系统变量:对所有的用户起作用 用户变量:对当前用户起作用 那么为什么要设置环境变量? 在Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有 ...

  4. go 指针变量和普通变量的转化_C语言 | 指向结构体变量的指针变量

    "要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语 ...

  5. 堆栈,静态变量和普通变量,静态函数和普通函数的区别

    首先简单介绍一下堆和栈的区别. 1.内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1).栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似 ...

  6. awk 内置变量与自定义变量

    点击上方"生信科技爱好者",马上关注真爱,请置顶或星标 作者:ghostwu 原文:https://www.cnblogs.com/ghostwu/p/9085653.html A ...

  7. R语言广义加性模型GAMs:可视化每个变量的样条函数、样条函数与变量与目标变量之间的平滑曲线比较、并进行多变量的归一化比较、测试广义线性加性模型GAMs在测试集上的表现(防止过拟合)

    R语言广义加性模型GAMs:可视化每个变量的样条函数.样条函数与变量与目标变量之间的平滑曲线比较.并进行多变量的归一化比较.测试广义线性加性模型GAMs在测试集上的表现(防止过拟合) 目录

  8. R语言创建自定义颜色(分类变量与颜色形成稳定映射)实战:设置因子变量(分类变量)到可视化颜色的稳定映射

    R语言创建自定义颜色(分类变量与颜色形成稳定映射)实战:设置因子变量(分类变量)到可视化颜色的稳定映射 目录

  9. 环境变量、用户变量、系统变量

    环境变量.用户变量.系统变量 环境变量: 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等. 环境变量 ...

  10. linux脚本查看变量类型,Shell变量:Shell变量的定义、删除变量、只读变量、变量类型...

    变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据.脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则. 在 Bash shell 中,每一个变量的值 ...

最新文章

  1. linux驱动:音频驱动(三)ASoc之machine驱动及card初始化
  2. Eclipse Collections:让Java Streams更上一层楼
  3. 2016 排行前20 的编程语言
  4. linux切换到管理员失败解决方法(因为误操作导致不能切换到管理员用户)
  5. webapi 路由限制命名控件_什么是命名数据网络NDN?
  6. 程序员爬取 5000+ 口红数据,差点比女朋友更懂口红?
  7. 华理c语言设计网上作业,华理c程序实验报告(共9篇).doc
  8. axios 取消请求_封装 axios 取消重复请求
  9. fastjson 添加key value_采坑系列—fastjson
  10. ubuntu无法定位软件包的问题
  11. 苹果M1如何安装Rosetta
  12. boost asio生成lib
  13. pandas+matplotlib——习题一
  14. 倒立摆c语言程序设计,清华大学倒立摆控制系统实验指导书.pdf
  15. h2o java,h2o深度学习权重和规范化
  16. CSDN格式字体颜色入门
  17. java reflection 作用,全方位解读Java反射(reflection)
  18. Linux菜鸟到老鸟的那些建议
  19. Merriam-Webster's Vocabulary Builder 学习笔记 Unit 21
  20. 强强联合,怿星科技艾拉比携手斩获“铃轩奖”

热门文章

  1. loadView的使用总结
  2. 查找出系统中大于50k 且小于100k 的文件并删除。
  3. iOS 9之WatchKit for WatchOS 2
  4. 控制器中获取Field值
  5. PHP Cookbook读书笔记 – 第16章互联网服务
  6. 逝去的大学生活自己丢了什么
  7. C#与VB.NET代码互相转换在线工具
  8. 金蝶云系统显示服务器离线,金蝶云服务器已离线是什么情况
  9. 华为杯大学生计算机软件大赛,关于举办2018年西安电子科技大学程序设计网络赛暨第十六届“华为杯”大学生程序设计竞赛的通知...
  10. linux ntp 'ntp_request.c'远程拒绝服务漏洞,NTP 'ntp_request.c'远程拒绝服务漏洞