您的位置:首页 > 编程语言 > PHP开发

PHP语法中的变量

2007-09-25 14:40 281 查看
在PHP中变量不需要声明数据类型,直接给变量赋值即可,变量会在赋值时自动转换为相应的数据类型。但是,需要注意PHP中使用一个美元符号后面跟上量名称,来表示一个变量,而且变量的名称是对区分大小写的。
变量名应与PHP中其它的标记一样遵循相同的规则。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。按照正常的正则表达式,它将被表述为:'[a-zA-Z_/x7f-/xff][a-zA-Z0-9_/x7f-/xff]*'。例如:

<?php
$var = "abc";
$Var = "def";
echo "$var, $Var"; //输出为"abcdef"
$4site = 'not yet'; //无效变量,以数字开始
$_4site = 'not yet'; //有效
$t?yte = 'mansikka'; //有效
?>

在这里通过"="列举了几种变量的赋值方式。在PHP中,还支持另一种赋值方式,称为变量的引用赋值,例如下面的示例:

<?php
$foo = 'Bob'; // 为变量$foo赋值
$bar = &$foo; //变量 $bar.引用了变量 $foo的值
$bar = "My name is $bar"; // 修改变量$bar的值
echo $bar;
echo $foo; // 变量$foo的值也被修改
?>

从这里可以看出,对一个变量值的修改将会导致对另外一个变量值的修改。从本质上讲,变量的引用赋值导致两个变量指向同一个内存地址。因此,不论对哪一个变量进行修改,修改的是同一个内存地址中的数据,从而出现同时被修改的结果。
1.常量
在PHP中提供了大量的预定义变量,也就是常量。同时还允许用户自定义常量,常量的值在程序运行过程中不会发生改变。常用的系统常量有:
l $GLOBALS 包含一个引用指向每个当前脚本的全局范围内有效的变量。
l $_SERVER 变量由Web服务器设定或者直接与当前脚本的执行环境相关联。$_GET 由HTTP GET方法提交至脚本的变量。
l $_POST 由HTTP POST方法提交至脚本的变量。
l $_COOKIE 由 HTTP Cookies方法提交至脚本的变量。
l $_FILES 由 HTTP POST 文件上传而提交至脚本的变量。
l $_ENV 执行环境提交至脚本的变量。
l $_REQUEST 由GET,POST和COOKIE机制提交至脚本的变量
如果用户需要自定义常量,可使用define()函数。例如,下面定义一个名为HOST的常量:

<?php
define("HOST","www.itzcn.com");
echo HOST;
?>

2.变量作用域
变量的作用域即指变量的有效范围,也称为变量的生命周期。在PHP中,大部分变量只的一个单独的范围,这个单独的范围跨度包含了使用include和require引入的文件。按作用域的大小,PHP变量可分为全局变量和局部变量。
例如,对于下面的PHP代码:

<?php
$a = 1;
include "test.inc";
?>

这里变量$a将会在包含文件test.inc中生效。但是,在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。又例如,下面的示例

<?php
$a = 1; /* 变量a具有全局作用域 */
function Test()
{
echo $a; /* 引用了未定义的变量a */
}
Test();
?>

这个脚本不会有任何输出,因为echo语句引用了一个局部范围的变量 $a,而且在这个范围内,它并没有被赋值。读者可能注意到PHP的全局变量和C语言有一点点不同,在C语言中,全局变量在函数中自动生效,除非被局部变量覆盖。这可能引起一些问题,有些人可能漫不经心的改变一个全局变量。PHP中全局变量在函数中使用时必须申明为全局。
下面为一个使用全局变量的正确示例:

<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>

以上脚本的输出将是"3"。在函数中申明了全局变量$a和$b,任何变量的所有引用变量都会指向到全局变量。对于一个函数能够申明的全局变量的最大个数,PHP 没有限制。在全局范围内访问变量的第二个办法,是用特殊的PHP自定义$GLOBALS数组。前面的例子可以写成:

<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum();
echo $b;
?>

在 $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。
3.静态变量和动态变量
静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。下面是演示需要静态变量的例子:

<?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的值并加一。
4.动态变量
有时候使用动态变量会很方便,所谓动态变量指的是一个变量的变量名可以动态的设置和使用。一个普通的变量通过声明来设置,例如:

<?php
$a = "hello";
?>

一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。在上面的例子中 hello 使用了两个美元符号($)以后,就可以作为一个可变变量的变量了。例如:

<?php
$$a = "world";
?>

这时,两个变量都被定义了:$a的内容是“hello”并且 $hello的内容是“world”。因此,可以表述为:

<?php
echo "$a ${$a}";
?>

以下写法更准确并且会输出同样的结果:

<?php
echo "$a $hello";
?>

它们都会输出:hello world。
5.外部变量
在PHP中,将从HTML页面中提交过来的FORM标记中的元素当作外部变量来使用。外部变量名称和表单中的元素名称相同。
例如,下面的一个简单的HTML页面的内容:

<html>
<head>
<title>兴趣收集</title>
</head>
<body>
<form name="myForm" action="sub.php" method="POST">
请输入姓名:<br>
<input type="text" name="uname"><br>
兴趣:<input type="text" name="uinterest"><input type="submit">
</body>
</html>

这个文件提交到sub.php中进行处理,该文件包括一行代码,如下所示:

<?php
echo $uname.", 你的兴趣是 ".$uinterest;
?>

需要注意的是,PHP中使用的变量名称与表单提交的名称必须一致,运行效果如图22-4所示。



图22-4 使用外部变量示例
在PHP中,另一种获取外部变量的方式就是使用Cookie,任何由客户端返回的Cookie都会被自动转换为PHP的外部变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: