Heim  >  Artikel  >  Backend-Entwicklung  >  变量 - PHP手册笔记

变量 - PHP手册笔记

WBOY
WBOYOriginal
2016-08-08 09:29:28814Durchsuche

基础

PHP中的变量用一个美元符号后面跟变量名来表示。变量名是区分大小写的,并且出现中文可能也是合法的。

变量默认总是传值赋值。PHP也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的引用(换言之,"成为其别名" 或者 "指向")了原始变量。改动新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)。注意,只有有名字的变量才可以引用赋值。

预定义变量

PHP拥有大量预定义变量,许多变量依赖与服务器,某些预定义变量以命令行形式运行时并不生效。

PHP提供了一套附加的预定数组,这些数组变量包含了来自web服务器(如果可用),运行环境,和用户输入的数据,通常被称为自动全局变量(autoglobals)或者超全局变量(superglobals)。

变量范围

这里的变量范围指的是,它定义的上下文背景,也就是它的生效范围。变量的范围包含了include和require引入的文件。

PHP的全局变量和C语言有一点点不同,在C语言中,全局变量在函数中自动生效,除非被局部变量覆盖。PHP中全局变量在函数中使用时必须声明为global。

<code><?php $a = &#39;hello&#39;;
function test() {
	var_dump($a);
}
// test();
include &#39;b.inc&#39;;</code></code>

b.inc内容如下:

<code><?php echo &#39;hello&#39;;
?></code>

该程序能够正常输出hello,但是被注释掉的test()不能正常解析,因为变量$a是未定义的。

使用全局变量

若在某个函数中想使用全局变量,可以通过下面两种方式。

  1. global关键字
<code>global $a, $b;</code>

在函数中声明全局变量后,对任一变量的所有引用都会指向其全局版本。

  1. $GLOBALS超全局变量数组
<code>$GLOBALS['b'] = $GLOBALS['a'] + $BLOBALS['b'];</code>

用法同global关键字相似。

静态变量

静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。并且,只在声明时初始化一次,每次调用函数并不会覆盖静态函数的值。

静态变量在声明中用表达式的结果对其赋值会导致解析错误,静态声明是在编译时解析的。

<code><?php function test() {
	static $cnt = 0;
	echo $cnt;
	$cnt++;
	if($cnt < 10) {
		test();
	}
	$cnt--;
}
test();</code></code>

和C语言的static相似,下面这段C代码也可以把0~9十个数字依次输出。

<code>#include <stdio.h>
void test(void) {
	static int cnt = 0;
	printf("%d ", cnt);
	cnt++;
	if(cnt </stdio.h></code>

对于变量的static和global定义是以引用的方式实现的。

可变变量

可变变量是PHP语言中的一种特殊用法,不知其他语言存不存在。

简而言之,可变变量就是,一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。

<code><?php $a = &#39;hello&#39;;
$$a = &#39;world&#39;;
echo "$a $$a";  // hello $hello
echo "$a ${$a}";  // hello world</code></code>

当可变变量用于数组时,可能会出现模棱两可的问题。比如,写下$$a[1],编译器会报错的,你想要表达的意思需要用下面两种方式替换掉。

${$a[1]}
$a[1]作为一个变量

${$a}[1]
$$a作为一个变量并取出变量中索引为1的值。

表单变量

当表单提交给PHP脚本时,表单中的信息自动在脚本中可用,可以通过$_GET[]$_POST[]$_REQUEST[]访问。

注意,变量名中的点和空格被转换成下划线。例如<input name="a.b">变成了$_REQUEST["a_b"],下面的示例中展示了表单中标识符的使用。

<code><form action="process.php" method="post">
<input name="my.text" type="text">
<input name="my text" type="text">
<input name="my_text" type="text">
<input type="submit">
</form></code>

表单处理文件process.php

<code><?php var_dump(isset($_POST[&#39;my.text&#39;]));
var_dump(isset($_POST[&#39;mytext&#39;]));
var_dump(isset($_POST[&#39;my_text&#39;]));
var_dump($_POST[&#39;my_text&#39;]);</code></code>

因为句点不是PHP变量名中的合法字符,输出结果如下所示。

<code>boolean false

boolean false

boolean true

string 'h3' (length=2)</code>

magic_quotes_gpc配置指令影响到get/post/cooie的值,这个特性已经废弃移除,输入中的单引号、双引号、反斜杠和NULL字符都不会被转义。若需要转义可使用addslashes(),若需要反引用一个引用的字符串需要使用stripslashes()

PHP也懂得表单变量上下文中的数组,下面的例子使用了更复杂的表单变量,并将表单post给自己并在提交时显示数据。

<code><?php if(isset($_POST[&#39;action&#39;])) {
	var_dump($_POST);
} else {
	$page = $_SERVER[&#39;PHP_SELF&#39;];
	$s = <<<STR
<form action="{$_SERVER[&#39;PHP_SELF&#39;]}" method="post">
<input type="text" name="personal[name]">
<input type="text" name="personal[detail]">
<select multiple name="option[]">
	<option value="a">a</option>
	<option value="b">b</option>
	<option value="c">c</option>
</select>
<input type="hidden" name="action" value="submitted">
<input type="submit" name="submit">

STR;
	echo $s;
}</code>

在heredoc中含有复杂变量时要格外小心,上面这段代码$_SERVER['PHP_SELF']不加花括号会在运行时报错。

<code>array (size=4)
  'personal' => 
    array (size=2)
      'name' => string 'hello' (length=5)
      'detail' => string 'world' (length=5)
  'option' => 
    array (size=2)
      0 => string 'a' (length=1)
      1 => string 'c' (length=1)
  'action' => string 'submitted' (length=9)
  'submit' => string '提交查询内容' (length=12)</code>

IMAGE提交

当提交表单时,可以用一张图片代替标准的提交按钮。第一次使用,真的好神奇。

<code><?php if(isset($_POST[&#39;action&#39;])) {
	var_dump($_POST);
} else {
	$s = <<<STR
<form action="{$_SERVER[&#39;PHP_SELF&#39;]}" method="post">
<input type="hidden" name="action" value="1">
<input type="image" src="go.jpg" name="sub">

STR;
	echo $s;
}</code>

对于上面这段程序,当用户点击图片某处时,表单会传送到服务器,并加上两个变量sub_xsub_y,包含了用户点击图片的坐标。

<code>array (size=3)
  'action' => string '1' (length=1)
  'sub_x' => string '334' (length=3)
  'sub_y' => string '282' (length=3)</code>

cookies

PHP可以用setcookie()函数设定cookies,cookies是HTTP信息头的一部分,因此必须在向浏览器发送任何输出之前调用。

cookie的相关使用如下所示。

<code><?php if(isset($_COOKIE[&#39;cnt&#39;])) {
	$cnt = $_COOKIE[&#39;cnt&#39;] + 1;	
	echo $cnt;
} else {
	$cnt = 1;
}
setcookie(&#39;cnt&#39;, $cnt, time() + 3600);</code></code>

cookie数据在相应的cookie数组中可用,如果将多个值赋给一个cookie变量,必须将其赋成数组。

(全文完)

以上就介绍了变量 - PHP手册笔记,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:windows下配置pcreNächster Artikel:常量 - PHP手册笔记