PHP变量定义及常见预定义全局变量


前言

本文就介绍了关于变量的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、变量概念

  • 变量是存储信息的容器
  • PHP 没有声明变量的命令。
  • 变量在您第一次赋值给它的时候被创建。 PHP 中不需要初始化变量,但对变量进行初始化是个好习惯。未初始化的变量具有其类型的默认值。布尔类型的变量默认值是 FALSE,整形和浮点型变量默认值是零,字符串型变量默认值是空字符串以及数组变量的默认值是空数组。
  • PHP 会根据变量的值,自动把变量转换为正确的数据类型。

二、变量命名

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)

三、变量赋值

  • 传值赋值:当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
  • 引用赋值:新的变量简单的引用了原始变量。改动新的变量将影响到原始变量,反之亦然。将一个 & 符号加到将要赋值的变量前(源变量)。
  • isset()可以用来检测一个变量是否被初始化。
$name1 = 'PHP';
$name2 = &$name1;		//name2引用了name1
$name2 = 'this is '.$name2;	//改变name2的值,同时会改变name1的值。
echo $name2."<br>";		//输出 this is PHP;
echo $name1;			//输出 this is PHP;

四、预定义变量

PHP依赖于运行的服务器的版本和设置,及其它因素,提供的一些已经定义及赋值的变量。这些变量将所有的外部变量表示成内建环境变量,并且将错误信息表示成返回头。

1、超全局变量

超全局变量是在全部作用域中始终可用的内置变量。在函数或方法中无需执行 global $var; 就可以访问它们。
超全局变量包括:$GLOBALS、$_SERVER、$_GET、$_POST、$_REQUEST、$_COOKIE、$_SESSION、$_FILES、$_ENV。

2、$GLOBALS

引用全局作用域中可用的全部变量。一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

function getName(){
	$name = 'JAVA';
	echo 'my name is '.$name."<br>";		//输出 my name is JAVA
	echo 'my name is '.$GLOBALS['name'];	//输出 my name is PHP
}
$name = 'PHP';
getName();

注:global和$GLOBALS的区别
$GLOBALS[‘var’]是外部的全局变量本身,而global $var是外部$var的同名引用或者指针,也就是说global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量,而$GLOBALS[]确确实实调用的是外部的变量,函数内外会始终保持一致。

$var = 1;
function test(){
	unset($GLOBALS['var']);
}
test();
echo $var;		//空值

$var1 = 1;
function test1(){
	global $var1;	//只是调用了外部变量的一个别名
	unset($var1);
}
test1();
echo $var1;		//输出1

3、$_SERVER

服务器和执行环境信息。由 Web 服务器创建的,提供服务器或者执行环境的信息,比如请求头、路径、脚本位置等。以下是列取一部分数组。

  • ‘PHP_SELF’:当前执行脚本的文件名,与 document root 有关。
  • ‘argv’:传递给该脚本的参数的数组。
  • ‘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’:请求开始时的时间戳。
  • ‘REQUEST_TIME_FLOAT’:请求开始时的时间戳,微秒级。
  • ‘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_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 服务器所使用的端口号。
  • ‘REMOTE_USER’:经验证的用户。
  • ‘REDIRECT_REMOTE_USER’:验证的用户,如果请求已在内部重定向。
  • ‘SCRIPT_FILENAME’:当前执行脚本的绝对路径。
  • ‘SERVER_ADMIN’:该值指明了 Apache 服务器配置文件中的。
  • ‘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)之前的路径信息。例如,如果当前脚本是通过 URL http://www.example.com/php/path_info.php/some/stuff?foo=bar 被访问,那么$_SERVER[‘PATH_INFO’] 将包含 /some/stuff。
  • ‘ORIG_PATH_INFO’:在被 PHP处理之前,“PATH_INFO” 的原始版本。

4、$_GET

HTTP GET 变量。通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组。
从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制。HTTP GET 方法不适合大型的变量值。get方式提交数据的大小,http协议并没有硬性限制;而是与浏览器及服务器、操作系统有关。

5、$_POST

HTTP POST 变量。当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本。
从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。POST提交的参数个数及长度都可在php.ini修改。

POST和GET的区别
请求方式的区别:GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。POST请求会把请求的数据放置在HTTP请求包的包体中。GET请求的数据会暴露在地址栏中,而POST请求则不会。
传输数据的大小:在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。POST请求参数受服务器配置控制。
安全性:POST的安全性比GET的高。通过GET请求,请求参数会暴露在url上,GET请求提交的数据还可能会造成Cross-site request frogery攻击。

6、$_FILES

HTTP 文件上传变量。此数组包含有所有上传的文件信息,如果单文件,该数组为二维数组。如果是多文件上传的话,该数组为三维数组。
$_FILES[‘userfile’][‘name’]客户端机器文件的原名称。
$_FILES[‘userfile’][‘type’]文件的 MIME 类型。
$_FILES[‘userfile’][‘size’]已上传文件的大小,单位为字节。
$_FILES[‘userfile’][‘tmp_name’]文件被上传后在服务端储存的临时文件名。
$_FILES[‘userfile’][‘error’]和该文件上传相关的错误代码。

  • UPLOAD_ERR_OK其值为 0,没有错误发生,文件上传成功。
  • UPLOAD_ERR_INI_SIZE其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
  • UPLOAD_ERR_FORM_SIZE其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
  • UPLOAD_ERR_PARTIAL其值为 3,文件只有部分被上传。
  • UPLOAD_ERR_NO_FILE其值为 4,没有文件被上传。
  • UPLOAD_ERR_NO_TMP_DIR其值为 6,找不到临时文件夹。
  • UPLOAD_ERR_CANT_WRITE其值为 7,文件写入失败。
    文件被上传结束后,默认地被存储在了临时目录中,这时您必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。将上传的文件移动到新位置move_uploaded_file(文件原来的路径和文件名,文件的目的路径和文件名);
    文件被上传后,默认地会被储存到服务端的默认临时目录中,除非 php.ini 中的 upload_tmp_dir 设置为其它的路径。服务端的默认临时目录可以通过更改 PHP 运行环境的环境变量 TMPDIR 来重新设置。

7、$_REQUEST

HTTP Request 变量。默认情况下包含了$_GET、$_POST、$_COOKIE的数组。php.ini中的request_order会影响 $_REQUEST 的内容。

8、$_SESSION

Session 变量。由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。
每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。

9、$_COOKIE

Cookie 变量。cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。

COOKIE和SESSION的区别

  • 存放的位置不同。cookie数据存放在bai客户的浏览器上,session数据放在服务器上。
  • 安全程度不同。cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
  • 性能使用程度不同。session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
  • 数据存储大小不同。单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。
  • 会话机制不同。
    session会话机制:session会话机制是一种服务器端机制,它使用类似于哈希表的结构来保存信息。
    cookies会话机制:cookie是服务器存储在本地计算机上的小块文本,并随每个请求发送到同一服务器。 Web服务器使用HTTP标头将cookie发送到客户端。在客户端终端,浏览器解析cookie并将其保存为本地文件,该文件自动将来自同一服务器的任何请求绑定到这些cookie。

10、$_ENV

服务器端环境变量。通过环境方式传递给当前脚本的变量的数组。这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell。不同的系统$_ENV有可能不同。php.ini的variables_order变量可以设置$_ENV开关。


总结

以上就是今天要讲的内容,本文主要介绍了PHP变量。

  • 变量的概念:存储数据的容器。不需要初始化,在给变量赋值时自动创建,根据变量的值,自动转换为正确的数据类型。未初始化的变量有默认的值。
  • 变量的命名:$符开始,尽可能多的匹配变量名。由字母、数字、下划线组成,但是只能字母或者下划线开头。区分大小写。
  • 变量的赋值:传值赋值和引用赋值(&符,改动新的变量将影响到原始变量)
  • 预定义变量,超全局变量($GLOBALS、$_SERVER、$_GET、$_POST、$_FILES、$_REQUEST、$_SESSION、$_COOKIE、$_ENV)。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值