变量
PHP中文手册首页

来自外部数据源的变量

HTML表单(GET和POST)

当表单被提交到一个PHP脚本,来自表单的信息就会自动的变成脚本中的变量。 有很多方法可以访问这些信息,例如:

例1 一个简单的HTML表单

<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>

取决于你的具体安装和个人偏好设置,有许多方法可以访问HTML表单里面的数据。一些例子为:

例2 从简单的HTML POST表单访问数据

<?php 
// Available since PHP 4.1.0

   echo $_POST['username'];
   echo $_REQUEST['username'];

   import_request_variables('p', 'p_');
   echo $p_username;

// Unavailable since PHP 6. As of PHP 5.0.0, these long predefined
// variables can be disabled with the register_long_arrays directive.

   echo $HTTP_POST_VARS['username'];

// Available if the PHP directive register_globals = on. As of 
// PHP 4.2.0 the default value of register_globals = off.
// Using/relying on this method is not preferred.

   echo $username;
?>

使用GET表单跟这个很类似只是要用对应的GET预定义变量。 GET也用于QUERY_STRING(地址中'?'后面的信息)。 所以,例如http://www.example.com/test.php?id=3包含的GET数据,可以用$_GET['id']访问。 参见$_REQUEST以及import_request_variables()函数。

注意Superglobal arrays,如$_POST$_GET,由PHP 4.1.0引入。

如上,在PHP 4.2.0之前register_globals开关的默认值是打开。 PHP社区鼓励不要依赖于这个开关,假定它为关闭,并据此编程。

注意magic_quotes_gpc配置开关对Get,Post和Cookie值都有影响。 如果打开,值(It's "PHP!")会自动转换为(It\'s \"PHP!\")。 在往数据库插入数据时需要这种转义。 参见函数addslashes(),函数stripslashes()和开关magic_quotes_sybase

PHP还可以理解在表单变量中的数组(参见相关faq)。例如,你可以把相关的变量组织起来,使用这个特性获得多选输入的值。例如,我们让一个表单Post给自己,然后在提交后显示数据:

例3 更复杂的表单变量

<?php
if ($_POST) {
    echo 
'<pre>';
    echo 
htmlspecialchars(print_r($_POSTtrue));
    echo 
'</pre>';
}
?>
<form action="" 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äu</option>
    </select><br />
    <input type="submit" value="submit me!" />
</form>

图像提交按钮的变量名

我们可以用一个图像代替标准提交按钮来提交表单,它的标记形如:

<input type="image" src="image.gif" name="sub" />

当用户点击图像时,表单就会传输到服务器去,并带有两个附加的值,sub_x和sub_y(译注:sub就是图像的name)。 它们包含了用户点击在图像时的位置。 有经验的开发者可能会发现浏览器发送到服务器的实际变量名包含一个点,而不是下划线(也就是原始的变量为sub.x和sub.y),但是PHP自动把这个点转换成下划线了。

HTTP Cookie

PHP透明地支持» Netscape规范规定的HTTP Cookie。 Cookie是一种在浏览器端保存数据的机制,可以用来跟踪和识别回访者。 你可以使用setcookie()函数设置cookie。 Cookie是HTTP头的一部分,所以SetCookie函数必须在发送任何输出到浏览器前调用。 这和header()的限制要求相同。 Cookie数据存在于相应的cookie数据数组中,如$_COOKIE$HTTP_COOKIE_VARS以及$_REQUEST。 参见setcookie()函数查看更多详情和例子。

如果你希望在一个cookie变量中加入多个值,你可以赋给它一个数组。例如:

<?php
  setcookie
("MyCookie[foo]"'Testing 1'time()+3600);
  
setcookie("MyCookie[bar]"'Testing 2'time()+3600);
?>

这将创建两个分别的cookie,虽然在你的脚本中MyCookie是一个单一的数组。如果你就是想一个cookie里面包含多个值,可以考虑使用serialize()函数或者 explode()函数事先对值进行处理。

注意同名的cookie会覆盖原有的cookie,除非他们的路径或者域名不同。 所以,对于一个网店购物车程序你可能希望分别保存计数器和密码。

例4 setcookie() 例子

<?php
if (isset($_COOKIE['count'])) {
    
$count $_COOKIE['count'] + 1;
} else {
    
$count 1;
}
setcookie('count'$counttime()+3600);
setcookie("Cart[$count]"$itemtime()+3600);
?>

引入的变量名中的英文句号

通常,当变量传入脚本时,PHP不会修改它的名字。 然而,英文句号在PHP的变量名中不合法。所以,如下:

<?php
$varname
.ext;  /* invalid variable name */
?>

现在,解析器看到的变量名应该为$varname,紧跟这一个字符串连接符(译注:也就是英文句号),然后跟着一个裸字符串(没有双引号的字符串,也不匹配任何已知的关键字和保留字)'ext'。显然,这无法得到任何立即结果。

出于这种原因,请注意PHP会自动把引入的变量名中的英文句号替换为下划线。

决定变量类型

因为PHP自动检测变量的类型,并把它们转换为需要的类型,在任何一个时刻一个变量的类型都是不明确的。 PHP包含了几个函数用来查询变量的类型,如: gettype()is_array()is_float()is_int()is_object(),和is_string()。参见类型


变量
PHP中文手册首页





代码中国其他文档:Google Maps API文档 | Google文件系统论文 | 《信息检索》翻译版