php全局变量赋值给局部变量,php 的全局变量与局部变量

所谓的全局变量与局部变量,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 的值。

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

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

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

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

<?php // 静态变量的例子 function myfunc() { static $mystr; $mystr.="哈"; echo $mystr."
\n"; } myfunc();  // 哈 myfunc();  // 哈哈 myfunc();  // 哈哈哈 ?>

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

<?php // 不是静态变量的例子 (错误的) function myfunc() { $mystr.="哈"; echo $mystr."
\n"; } myfunc();  // 哈 myfunc();  // 哈 myfunc();  // 哈 ?>

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

<?php function tdbackcolor() { static $colorstr; if ($colorstr=="808080") { $colorstr="c0c0c0"; } else { $colorstr="808080"; } return($colorstr); } echo "

这是第".$i."行

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

举出一个例子 (24-apr-1999),他称为变量的函数 (variable function)

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

姓名:
性别:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值