首页WEB开发PHP教程 → php基础知识:变量

php基础知识:变量

日期:2007-6-4 15:18:48 出处:其他转载 作者:不详 人气:

这一节比较容易,就写一些应该注意的问题。

1>在 PHP 中并不需要初始化变量,但这是个好习惯。
未初始化的变量具有其类型的默认值 - FALSE,零,空字符串或者空数组.依赖未初始化变量的默认值。依赖未初始化默认值常常会出现问题:例如把一个文件包含到另一个之中时碰上相同的变量名。
2>把 register_globals 打开是一个主要的安全隐患。
E_NOTICE 级别的错误会在碰上未初始化的变量时发出,但是在向一个未初始化的数组附加单元时不会。isset() 语言结构可以用来检测一个变量是否已被初始化。
3>PHP预定义变量
   a>php4以后,register_globals默认为off。
   b>php超全局变量:
     $_SERVER
     变量由 web 服务器设定或者直接与当前脚本的执行环境相关联。
     $_GET
     经由 URL 请求提交至脚本的变量。
     $_POST
     经由 HTTP POST 方法提交至脚本的变量。
     $_COOKIE
     经由 HTTP Cookies 方法提交至脚本的变量。
     $_FILES
     经由 HTTP POST 文件上传而提交至脚本的变量。
     $_ENV
     执行环境提交至脚本的变量。这些变量从环境变量转变为 PHP 全局变量名称空间(namespace)。
     它们中的许多都是由 PHP 所运行的系统决定。完整的列表是不可能的。请查看系统的文档以确定其
     特定的环境变量。
     $_REQUEST
     经由 GET,POST 和 COOKIE 机制提交至脚本的变量,因此该数组并不值得信任。
     所有包含在该数组中的变量的存在与否以及变量的顺序均按照 php.ini 中的 variables_order
     配置指示来定义。此数组在 PHP 4.1.0 之前没有直接对应的版本。import_request_variables。
     小心:
        自 PHP 4.3.0 起,$_FILES 中的文件信息不再存在于 $_REQUEST 中。
     注意:
        当运行于命令行模式时,此数组将不会包含 argv 和 argc 条目;它们已经存在于数组 $_SERVER 中。
     $_SESSION
     当前注册给脚本会话的变量。详细信息,请参照 Session 处理函数章节。
4>变量范围
在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。例如:
$a = 1; /* global scope */
function Test()
{
   echo $a; /* reference to local scope variable */
}
Test();
这个脚本不会有任何输出,因为 echo 语句引用了一个局部版本的变量 $a,而且在这个范围内,它并没有被赋值。你可能注意到 PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖。这可能引起一些问题,有些人可能漫不经心的改变一个全局变量。PHP 中全局变量在函数中使用时必须申明为全局。

5>全局变量:global,$GLOBALS
$a = 1;
$b = 2;
function Sum()
{
   global $a, $b;

   $b = $a + $b;
}
Sum();
echo $b;
以上脚本的输出将是“3”。在函数中申明了全局变量 $a 和 $b,任何变量的所有引用变量都会指向到全局变量。对于一个函数能够申明的全局变量的最大个数,PHP 没有限制。
$a = 1;
$b = 2;
function Sum()
{
   $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b;
在 $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。

6>静态变量
申明:static $a=0;
注意:如果在声明中用表达式的结果对其赋值会导致解析错误。如static $a=5+6;是不被允许的(我都测试过)
7>全局变量和静态变量的引用
对于变量的 static 和 global 定义是以 references 的方式实现的。例如,在一个函数域内部用 global 语句导入的一个真正的全局变量实际上是建立了一个到全局变量的引用。这有可能导致预料之外的行为,
如以下例子所演示的(??????不明白??????):
function test_global_ref() {
   global $obj;
   $obj = &new stdclass;
}

function test_global_noref() {
   global $obj;
   $obj = new stdclass;
}

test_global_ref();
var_dump($obj);
test_global_noref();
var_dump($obj);
输出为:
NULL
object(stdClass)(0) {
}
8>可变变量
php可以随时设置变量的值。更为奇特的是,php有一种独有的方式
如:$a='b';
   $b='c';
   echo $$a;//相当于$b
但是:
要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]。
9>IMAGE SUBMIT 变量名
当提交表单时,可以用一幅图像代替标准的提交按钮,用类似这样的标记:
<input type="image" src="image.gif" name="sub" />
当用户点击到图像中的某处时,相应的表单会被传送到服务器,并加上两个变量 sub_x 和 sub_y。它们包含了用户点击图像的坐标。有经验的用户可能会注意到被浏览器发送的实际变量名包含的是一个点而不是下划线(即 sub.x 和 sub.y),但 PHP 自动将点转换成了下划线。

10>确定变量类型
因为 PHP 会判断变量类型并在需要时进行转换(通常情况下),因此在某一时刻给定的变量是何种类型并不明显。PHP 包括几个函数可以判断变量的类型,例如:gettype(),is_array(),is_float(),is_int(),is_object() 和 is_string()。

关于本站 | 帮 助 | 广告服务 | 版权声明 | 业务合作 | 捐助本站 | 软件发布 | 联系我们
77资源下载 www.77zy.com ©2007-2008 版权所有
备案编号:赣ICP备07002641号  QQ:674648476