[PHP中文手册][二.语言参考-变量]
标签(空格分隔): 未分类
在此输入正文
基础
引用传递
<?php
$foo = 'Bob'; // 将 'Bob' 赋给 $foo
$bar = &$foo; // 通过 $bar 引用 $foo
$bar = "My name is $bar"; // 修改 $bar 变量
echo $bar;
echo $foo; // $foo 的值也被修改
?>
初始化
- 布尔类型的变量默认值是FALSE,
- 整形和浮点型变量默认值是零,
- 字符串型变量(例如用于echo中)默认值是空字符串
- 数组变量的默认值是空数组。
isset()
语言结构可以用来检测一个变量是否已被初始化。
预定义变量
PHP 提供了大量的预定义变量
。由于许多变量依赖于运行的服务器的版本和设置,及其它因素,所以并没有详细的说明文档。
Warning
PHP 4.2.0 以及后续版本中,PHP 指令
register_globals
的默认值为 off。让 register_globals 的值为 off 将影响到预定义变量集在全局范围内的有效性。例如,为了得到 DOCUMENT_ROOT 的值,将必须使用
$_SERVER['DOCUMENT_ROOT']
代替$DOCUMENT_ROOT
,又如,使用$_GET['id']
来代替$id
从 URL http://www.example.com/test.php?id=3 中获取 id 值,亦或使用$_ENV['HOME']
来代替 $HOME 获取环境变量 HOME 的值。如果有可用的 PHP 预定义变量那最好用超全局变量。
自动全局变量/超全局变量
从 PHP 4.1.0 开始,PHP提供了一套附加的预定数组
,这些数组变量包含了来自 web 服务器(如果可用),运行环境,和用户输入的数据。
- 尽管超全局变量和
HTTP_*_VARS
同时存在,但是它们并不是同一个变量,所以改变其中一个的值并不会对另一个产生影响。
变量范围
PHP不像C或其他,在外面定义的变量是全局变量。但不会自动生效。
<?php
$a = 1; /* global scope */
function Test()
{
echo $a; /* reference to local scope variable */
}
Test();
?>
这个脚本不会有任何输出,因为 echo 语句引用了一个局部版本的变量 $a,而且在这个范围内,它并没有被赋值。
PHP 中全局变量在函数中使用时必须声明为 global。
global
一个使用 global 的例子:
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>
$GLOBALS替代global
<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b;
?>
超全局变量和预定义变量区别
<?php
function test_global()
{
// 大多数的预定义变量并不 "super",它们需要用 'global' 关键字来使它们在函数的本地区域中有效。
global $HTTP_POST_VARS;
echo $HTTP_POST_VARS['name'];
// Superglobals 在任何范围内都有效,它们并不需要 'global' 声明。Superglobals 是在 PHP 4.1.0 引入的。
echo $_POST['name'];
}
?>
使用静态变量
<?php
function test()
{
static $a = 0;
echo $a;
$a++;
}
?>
- 静态声明是在编译时解析的。
全局和静态变量的引用
有点看不懂
可变变量
一个变量的变量名可以动态的设置和使用
<?php
$a = 'hello';
$$a = 'world';// 等于$hello='world`
$bar->$a //等于$bar->hello
echo "$a ${$a}";//等于 echo"$a $hello";
?>
来自PHP之外的变量
HTML 表单(GET 和 POST)
<form action="foo.php" method="POST">
Name: <input type="text" name="username"><br />
Email: <input type="text" name="email"><br />
<input type="submit" name="submit" value="Submit me!" />
</form>
php 读入这些数据
<?php
// 自 PHP 4.1.0 起可用
echo $_POST['username'];
echo $_REQUEST['username'];
import_request_variables('p', 'p_');
echo $p_username;// 自 PHP 5.0.0 起,这些长格式的预定义变量
// 可用 register_long_arrays 指令关闭。
echo $HTTP_POST_VARS['username'];
// 如果 PHP 指令 register_globals = on 时可用。不过自
// PHP 4.2.0 起默认值为 register_globals = off。
// 不提倡使用/依赖此种方法。 echo $username;
?>
使用 GET 表单也类似,只不过要用适当的 GET 预定义变量。GET 也适用于 QUERY_STRING(URL 中在“?”之后的信息)。因此,举例说,http://www.example.com/test.php?id=3包含有可用
$_GET['id']
来访问的 GET 数据。参见$_REQUEST
和import_request_variables()。
- 超全局数组例如
$_POST
和$_GET
,自 PHP 4.1.0 起可用。 - 变量名中的点和空格被转换成下划线。例如 变成了 $_REQUEST[“a_b”]。
PHP表单数组
<?php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
echo '<pre>';
print_r($_POST);
echo '<a href="'. $_SERVER['PHP_SELF'] .'">Please try again</a>';
echo '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Name: <input type="text" name="personal[name]"><br />
Email: <input type="text" name="personal[email]"><br />
Beer: <br>
<select multiple name="beer[]">
<option value="warthog">Warthog</option>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbr</option>
</select><br />
<input type="hidden" name="action" value="submitted" />
<input type="submit" name="submit" value="submit me!" />
</form>
<?php
}
?>
IMAGE SUBMIT 变量名
当提交表单时,可以用一幅图像代替标准的提交按钮,用类似这样的标记:
<input type="image" src="image.gif" name="sub" />
当用户点击到图像中的某处时,相应的表单会被传送到服务器,并加上两个变量 sub_x
和 sub_y
。它们包含了用户点击图像的坐标。有经验的用户可能会注意到被浏览器发送的实际变量名包含的是一个点而不是下划线(即 sub.x
和 sub.y
),但 PHP 自动将点转换成了下划线。
HTTP Cookies
PHP 透明地支持 » RFC 6265
定义中的HTTP cookies
。Cookies
是一种在远端浏览器端存储数据并能追踪或识别再次访问的用户的机制。
可以用 setcookie()
函数设定 cookies
。Cookies
是 HTTP 信息头中的一部分,因此 SetCookie
函数必须在向浏览器发送任何输出之前调用。
- 对于
header()
函数也有同样的限制。
Cookie
数据会在相应的 cookie
数据数组中可用,例如 $_COOKIE
,$HTTP_COOKIE_VARS
和 $_REQUEST
。更多细节和例子见 setcookie()
手册页面。