分享
 
 
 

PHP 完全中文手册-第三章Ⅱ-3

王朝php·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

就像大部份的结构化程序,有所谓的全局变量与局部变量,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 的值。

<?php

// 本程序使用 $GLOBALS 数组

function myfunc() {

echo $GLOBALS["PHP_SELF"];

}

myfunc();

?>

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

<?php

// 这是错误的示范

function errfunc() {

echo $PHP_SELF;

}

errfunc();

?>

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

<?php

// 本程序使用全局定义

function myfunc() {

global $PHP_SELF;

echo $PHP_SELF;

}

myfunc();

?>

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

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

<?php

// 静态变量的例子

function myfunc() {

static $mystr;

$mystr.="哈";

echo $mystr."<br>\n";

}

myfunc(); // 哈

myfunc(); // 哈哈

myfunc(); // 哈哈哈

?>

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

<?php

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

function myfunc() {

$mystr.="哈";

echo $mystr."<br>\n";

}

myfunc(); // 哈

myfunc(); // 哈

myfunc(); // 哈

?>

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

<?php

function TdBackColor() {

static $ColorStr;

if ($ColorStr=="808080") {

$ColorStr="c0c0c0";

} else {

$ColorStr="808080";

}

return($ColorStr);

}

echo "<table border=1>\n";

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

$ColorStr=TdBackColor();

echo "<tr><td bgcolor=".$ColorStr.">这是第".$i."行</td></tr>\n";

}

echo "</table>";

?>

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

<?php

$a = "Hello";

$$a = "world";

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

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

?>

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

<?php

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 实在是太神奇了。

<form action=next.php method=post>

姓名: <input type=text name="username"><br>

性别: <input type=text name="sex"><br>

<input type=submit>

</form>

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有