php变量

1、简介

PHP 中的变量用一个美圆符号后面跟变量名来表示。变量名是区分大小写的。变量名与 PHP 中其它的标签同样遵循相同的规则。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。 php

注意:在此所说的字母是 a-z,A-Z,以及 ASCII 字符从 127 到 255(0x7f-0xff)。  $this 是一个特殊的变量,它不能被赋值。能够看出变量名中也不能有.号。 html

前面几课其实已经用到了变量,变量的赋值等内容。试试下面的代码吧 数组

1 <?php
2 $var = 'Bob';
3 $Var = 'Joe';
4 echo "$var, $Var";      // 输出 "Bob, Joe"
5 $3value = 'value';     // 非法变量名;以数字开头运行时将报错
6 $_3v = 'value';    // 合法变量名;如下划线开头
7 $i好的is = 'value';  // 合法变量名;能够用中文
8  
9 ?>

PHP 也提供了另一种方式给变量赋值:引用赋值。这意味着新的变量简单的引用(相似于 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。 安全

使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)。例如,下列代码片段将输出“My name is Bob”两次: 服务器

1 <?php
2 $foo = 'Bob';              // 将 'Bob' 赋给 $foo
3 $bar = &$foo;              // 经过 $bar 引用 $foo
4 $bar = "My name is $bar";  // 修改 $bar 变量
5 echo $bar;
6 echo $foo;                 // $foo 的值也被修改
7 ?>

虽然在 PHP 中并不须要初始化变量,但对变量进行初始化是个好习惯。未初始化的变量具备其类型的默认值 – 布尔类型的变量默认值是 FALSE,整形和浮点型变量默认值是零,字符串型变量默认值是空字符串或者数组变量的默认值是空数组。 函数

依赖未初始化变量的默认值在某些状况下会有问题,例如把一个文件包含到另外一个之中时碰上相同的变量名。另外把 register_globals(全局变量) 打开是一个主要的安全隐患。使用未初始化的变量会发出E_NOTICE错误,可是在向一个未初始化的数组附加单元时不会。isset() 语言结构能够用来检测一个变量是否已被初始化。 性能

2、预约义变量

预约义变量其实就是至关于一些可预见的变量,好比地址?后面的值可使用$_GET获得,这个就是一个典型的预约义变量。 测试

一、$GLOBALS — 引用全局做用域中可用的所有变量。一个包含了所有变量的全局组合数组。变量的名字就是数组的键。(可是我以为这个全局变量容易让代码难以理解,因此我我的不推荐你们这么用)试试下面的代码吧 ui

1 function test(){
2   $l="我在函数里面\n";
3   echo $l;
4   echo $GLOBALS['l'];
5  
6 }
7 $l = "我在函数外面";
8 echo $l."\n";
9 test();

二、$_SERVER — 服务器和执行环境信息 ,$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器建立,可能根据不一样的服务器给出的内容不同。在 $_SERVER 中,你也许可以,也许不可以找到下面的这些元素。注意,若是以命令行方式运行 PHP,下面列出的元素几乎没有有效的(或是没有任何实际意义的)。 this

key 简介
PHP_SELF  当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将获得 /test.php/foo.bar。
argv 传递给该脚本的参数的数组。当脚本以命令行方式运行时,argv 变量传递给程序 C 语言样式的命令行参数。当经过 GET 方式调用时,该变量包含query string。
argc  包含命令行模式下传递给该脚本的参数的数目(若是运行在命令行模式下)。
GATEWAY_INTERFACE  服务器使用的 CGI 规范的版本;例如,“CGI/1.1”。
SERVER_ADDR  当前运行脚本所在的服务器的 IP 地址。
SERVER_NAME  当前运行脚本所在的服务器的主机名。若是脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。
SERVER_SOFTWARE  服务器标识字符串,在响应请求时的头信息中给出。
SERVER_PROTOCOL  请求页面时通讯协议的名称和版本。例如,“HTTP/1.0”。
REQUEST_METHOD  访问页面使用的请求方法;例如,“GET”, “HEAD”,“POST”,“PUT”。
REQUEST_TIME  请求开始时的时间戳。从 PHP 5.1.0 起可用。
QUERY_STRING  query string(查询字符串),若是有的话,经过它进行页面访问。
DOCUMENT_ROOT  当前运行脚本所在的文档根目录。在服务器配置文件中定义。
HTTP_ACCEPT  当前请求头中 Accept: 项的内容,若是存在的话。
HTTP_ACCEPT_CHARSET  当前请求头中 Accept-Charset: 项的内容,若是存在的话。例如:“iso-8859-1,*,utf-8”。
HTTP_ACCEPT_ENCODING  当前请求头中 Accept-Encoding: 项的内容,若是存在的话。例如:“gzip”。
HTTP_ACCEPT_LANGUAGE  当前请求头中 Accept-Language: 项的内容,若是存在的话。例如:“en”。
HTTP_CONNECTION  当前请求头中 Connection: 项的内容,若是存在的话。例如:“Keep-Alive”。
HTTP_HOST  当前请求头中 Host: 项的内容,若是存在的话。
HTTP_REFERER  引导用户代理到当前页的前一页的地址(若是存在)。由 user agent 设置决定。并非全部的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。
HTTP_USER_AGENT  当前请求头中 User-Agent: 项的内容,若是存在的话。该字符串代表了访问该页面的用户代理的信息。一个典型的例子是:Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。除此以外,你能够经过get_browser() 来使用该值,从而定制页面输出以便适应用户代理的性能。
HTTPS  若是脚本是经过 HTTPS 协议被访问,则被设为一个非空的值。
REMOTE_ADDR  浏览当前页面的用户的 IP 地址。
REMOTE_HOST  浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。
REMOTE_PORT  用户机器上链接到 Web 服务器所使用的端口号。
SCRIPT_FILENAME 当前执行脚本的绝对路径。若是在命令行界面(Command Line Interface, CLI)使用相对路径执行脚本,例如 file.php 或 ../file.php,那么 $_SERVER['SCRIPT_FILENAME'] 将包含用户指定的相对路径。
SERVER_ADMIN  该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。若是脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。
SERVER_PORT  Web 服务器使用的端口。默认值为 “80”。若是使用 SSL 安全链接,则这个值为用户设置的 HTTP 端口。
SERVER_SIGNATURE  包含了服务器版本和虚拟主机名的字符串。
PATH_TRANSLATED  当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
SCRIPT_NAME  包含当前脚本的路径。这在页面须要指向本身时很是有用。__FILE__ 常量包含当前脚本(例如包含文件)的完整路径和文件名。
REQUEST_URI  URI 用来指定要访问的页面。例如 “/index.html”。
PHP_AUTH_DIGEST  看成为 Apache 模块运行时,进行 HTTP Digest 认证的过程当中,此变量被设置成客户端发送的“Authorization” HTTP 头内容(以便做进一步的认证操做)。
PHP_AUTH_USER  当 PHP 运行在 Apache 或 IIS(PHP 5 是 ISAPI)模块方式下,而且正在使用 HTTP 认证功能,这个变量即是用户输入的用户名。
PHP_AUTH_PW 当 PHP 运行在 Apache 或 IIS(PHP 5 是 ISAPI)模块方式下,而且正在使用 HTTP 认证功能,这个变量即是用户输入的密码。
AUTH_TYPE 当 PHP 运行在 Apache 模块方式下,而且正在使用 HTTP 认证功能,这个变量即是认证的类型。
PATH_INFO 包含由客户端提供的、跟在真实脚本名称以后而且在查询语句(query string)以前的路径信息,若是存在的话。例如,若是当前脚本是经过 URLhttp://www.example.com/php/path_info.php/some/stuff?foo=bar 被访问,那么 $_SERVER['PATH_INFO'] 将包含 /some/stuff
ORIG_PATH_INFO 在被 PHP 处理以前,“PATH_INFO” 的原始版本。

三、$_GET 经过 URL 参数传递给当前脚本的变量的数组。即在命令行下失效。咱们在测试php那节讲过$_GET['__DEBUG__'],用法很简单。

四、$_POST 经过 HTTP POST 方法传递给当前脚本的变量的数组。和$_GET方法相似,只是传递方式不一样。

五、$_FILES 经过 HTTP POST 方式上传到当前脚本的项目的数组。

六、$_REQUEST 默认状况下包含了 $_GET,$_POST和 $_COOKIE 的数组。命令行方式运行时,将包含 argv 和 argc 信息;它们将存在于 $_SERVER 数组。因为 $_REQUEST 中的变量经过 GET,POST 和 COOKIE 输入机制传递给脚本文件,所以能够被远程用户篡改而并不可信。这个数组的项目及其顺序依赖于 PHP 的 variables_order 指令的配置。

七、$_SESSION 当前脚本可用 SESSION 变量的数组。

八、$_ENV经过环境方式传递给当前脚本的变量的数组。

这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。不少是由支持 PHP 运行的 Shell 提供的,而且不一样的系统极可能运行着不一样种类的 Shell,因此不可能有一份肯定的列表。请查看你的 Shell 文档来获取定义的环境变量列表。

其余环境变量包含了 CGI 变量,而无论 PHP 是以服务器模块仍是 CGI 处理器的方式运行。

九、$_COOKIE经过 HTTP Cookies 方式传递给当前脚本的变量的数组。

十、$php_errormsg$php_errormsg 变量包含由 PHP 生成的最新错误信息。这个变量只在错误发生的做用域内可用,而且要求 track_errors配置项是开启的(默认是关闭的)。

十一、$HTTP_RAW_POST_DATA $HTTP_RAW_POST_DATA 包含 POST 提交的原始数据。

十二、$http_response_header — HTTP 响应头

1三、$argc — 传递给脚本的参数数目

1四、$argv — 传递给脚本的参数数组

 3、变量范围

变量的范围即它定义的上下文背景(也就是它的生效范围)。大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度一样包含了 include 和 require 引入的文件。例如:

1 <?php
2 $a = "我是a";
3 include("b.php");
4 ?>

这个a在b.php一样有效。任何用于函数内部的变量按缺省状况将被限制在局部函数范围内。可是可使用global来改变有效范围。(和$GLOBALS相似,我也不推荐使用)例如:

01 <?php
02 $a = '我在外部';
03 function test(){
04 $a='我在内部,我和外面的a无关';
05 echo $a."\n";
06 global $a;//我声明和外面的a是同样的
07 echo $a."\n";
08 }
09 echo $a;
10 test();
11 ?>

变量范围的另外一个重要特性是静态变量静态变量仅在局部函数域中存在,但当程序执行离开此做用域时,其值并不丢失。看看下面的例子:

1 function test()
2 {
3     static $a = 0;
4     echo $a."\n";
5     $a++;
6 }
7 test();test();

若是在声明中用表达式的结果对其赋值会致使解析错误。

4、可变变量

 

其实可变变量就是变量名是个变量而已。请看代码

1 <?php
2 $a = 'hello';
3 $$a = "world";
4 echo "$a ${$a}";
5 echo "$a $hello";
6 ?>

这段代码,一开始定义了一个变量$a,而后定义了一个变量$$a,其实能够理解为$hello;因此第三句和第四句都将打印出hello world;

注意:要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 $$a[1]时,解析器须要知道是想要 $a[1]做为一个变量呢,仍是想要 $$a做为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种状况用 ${$a[1]},对第二种状况用 ${$a}[1]。

 

本文固定连接: http://www.qaforcode.net/archives/219 | 猪哥每日一贴

相关文章
相关标签/搜索