关闭

PHP语法中的变量

2238人阅读 评论(0) 收藏 举报

    在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  GETPOSTCOOKIE机制提交至脚本的变量

    如果用户需要自定义常量,可使用define()函数。例如,下面定义一个名为HOST的常量:

<?php

define("HOST","www.itzcn.com");

echo HOST;

?>

2.变量作用域

    变量的作用域即指变量的有效范围,也称为变量的生命周期。在PHP中,大部分变量只的一个单独的范围,这个单独的范围跨度包含了使用includerequire引入的文件。按作用域的大小,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的外部变量。

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:145329次
    • 积分:2397
    • 等级:
    • 排名:第16082名
    • 原创:80篇
    • 转载:4篇
    • 译文:0篇
    • 评论:98条
    文章分类
    最新评论