陈力:传智播客古代 珍宝币 泡泡龙游戏开发第40讲:PHP中预定义超全局变量

超全局变量是在全部作用域中始终可用的内置变量。PHP 中的许多预定义变量都是“超全局的”。PHP供提供了九种:$_GET、$_POST、$_REQUEST、$_SERVER、$_ENV、$_FILE、$_COOKIE、$_SESSION、$GLOBALS。本文结合贵阳网站建设的实践经验对这些知识进行介绍。

一、PHP中预定义超全局变量
<?php
 $a=23;//全局变量,因为该变量在整个作用域(在这个php文件中),都是可见 
 function test(){
  //如果希望使用到全局$a;
  global $a;
  $a=45;
 }
 test();
 echo $a;
?>

什么是超全局变量?
    超全局变量除了有全局变量的特点外,可以无须申明,直接使用。超全局变量是在全部作用域中始终可用的内置变量。PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 来访问它们。 
    PHP设计者提供这些超全局数组的目的是为了让PHP程序员可以更方便快捷的编写程序。

快速入门
 //超全局变量
 $_SERVER['user']="王五";
 echo "<pre>";
 echo print_r($_SERVER);
 echo "</pre>"
提供超全局数组的原因是为了让程序员更方便快捷的写出PHP程序。
PHP供提供了九种:$_GET、$_POST、$_REQUEST、$_SERVER、$_ENV、$_FILE、$_COOKIE、$_SESSION、$GLOBALS。

二、$_GET
$_GET : 通过 URL 参数传递给当前脚本的变量的数组。 
客户机(浏览器)通过超链接传送信息给服务器,客户机(浏览器)通过表单传送信息给服务器。
<a href="b.php?city=beijing">传递数据</a>
<a href="b.php?city=北京早">传递数据</a>

说明原理图:

$_GET 实际使用,客户机(浏览器)通过超链接传送信息给服务器。

案例:
test.php页面
<?php
 echo "<a href='a.php?city=北京好&name=xiaoming'>传送数据</a>";
?>
a.php页面
<?php
 echo "<pre>";
 echo print_r($_GET);
 echo "</pre>";
 //如果希望指定取出某个数据,则可以通过下标名
 echo $_GET['name'];
?>
看看ie5.5 和 ie 6的中文奇数乱码.

解决方法1.
给奇数中文加一个全角空格,然后到服务器接收是,去掉两头的空行 trim()
解决方法2:
使用urlencode 和 urldecode函数

在test.php页面
<?php
 //这句话是对中文url编码. 
 $str=urlencode("北京好");
 echo "<a href='a.php?city=".$str."&name=xiaoming'>传送数据</a>";
?>
//在a.php 页面中,正常接收。

<?php
 echo "<pre>";
 echo print_r($_GET);
 echo "</pre>";
 //如果希望指定取出某个数据,则可以通过下标名,如果php版本低,可能看到是中文,需要使用 urldecode() 来解密
 echo "--".$_GET['city'];
?>

_GET也可以接收表单以get方式提交数据
<form action=”a.php” method=”get”>
//....
</from>

特别说明如何提交表单数据建议使用POST,不要使用GET

使用细节: 
如果判断是否收到值:
a. php
 if(empty($_GET['city'])){
  echo "没有收到";
 }else{
  echo "有city";
  echo $_GET['city'];
 }

//这个方法可以,参看,建议使用empty
if(!isset($_GET['city'])){
  echo "没有收到hello";
 }else{
  echo "有city";
  echo $_GET['city'];
 }

绝对不要启用register_globals   需要 register_globals = Off

三、$_POST
    描述 : 通过Http POST 方式提交的数据,会被封装到$_POST超全局数组中。
    $_POST : 通过 HTTP POST 方法传递给当前脚本的变量的数组。
    客户机(浏览器)通过表单传送信息给服务器并且需要使用post方式。
    有些数据的提交必须使用post,比如上传文件。

举例: 接收表单信息:
各种表单输入项数据的获取
text、password、radio、checkbox、file、select、textarea、hidden、image、button 
代码:

代码:
register1.php页面
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<h1>用户注册</h1>
<form action="register2.php" method="post">
用户名:<input type="text" name="username"/><br/>
密码<input type="password" name="passwd"/><br/>
性别:<input type="radio" name="sex"  value="female" />女 <input type="radio" name="sex"  value="male" />男<br/>
你喜欢什么:
<input type="checkbox" name="hobby[]" value="唱歌">唱歌
<input type="checkbox" name="hobby[]" value="跳舞">跳舞
<input type="checkbox" name="hobby[]" value="游泳">游泳
<input type="checkbox" name="hobby[]" value="骑马">骑马
<br/>
你的所在地是:
<select name="city">
<option value="beijing">北京</option>
<option value="tianjing">天津</option>
<option value="nanjing">南京</option>
</select>
<br/>
个人介绍 :
<textarea rows="10" name="intro" cols="30">
</textarea><br/>
你选择图片<input type="file" name="myphoto"/><br/>
<input type="submit" value="提交"/>
</form>
</html>

**regiseter2.php***
<?php
 //看看如何接收
 echo "<pre>";
 echo print_r($_POST);
 echo "</pre>";
 //关心爱好
 $name=$_POST['username'];
 $pwd=$_POST['passwd'];
 //如何接收checkbox提交的数据
 $hobbies=$_POST['hobby'];
 echo "个人信息如下<br/>";
 echo "$name--$pwd";
 //print_r($hobbies);
 echo "该人的爱好";
 foreach($hobbies as $key=>$val){
  echo "<br/>$key=$val";
 }
 echo "<br/>你的所在地是";
 $city=$_POST['city'];
 echo $city;
 echo "<br/>个人介绍如下";
 $intro=$_POST['intro'];
 echo "<br/>$intro";
 echo "<a href='#'>查看调查情况</a>"
?>

扩展案例:编写生活幸福度的调查表,然后把调查的信息,存入到数据库.,看看能否获取数据,显示给用户看。

get数据提交主要是
<a></a>   默认是get提交。
<?php
 //当这样的方式跳转的时候,也是以get方式提交给ok.php
 header(“Location: ok.php?aaa=xiaoming”);
?>

post和get区别:
① 安全性  post>get
② 数据传输大小 [浏览器] post>get
③ 保存到收藏夹 get比较方便。

四、$_REQUST
    定义:$_REQUST中可以包括$_GET/$POST/$_COOKIE数组的信息。换一句话说: 就是$_REQUEST超全局数组中,可以获取 get/post/cookie数据。
快速入门:
这里就很好理解,看一个案例 :
<?php
 echo "<pre>";
 echo print_r($_REQUEST);
 echo "</pre>";
 //如何取出某个值
 //$_REQUEST既可以接收get  请求数据,也可以接收post请求、cookie..
 //所以这个变量,比较不可以信,不建议使用. $_GET $_POST
 echo $_REQUEST['aa'];
 //如果不确定get/post
 if($_SERVER['http_method']=="post"){
  $echo $_POST['名字'];
 }else if($_SERVER['http_method']=="get"){
  //用 _GET接收.
 }
?>
注意: 由于 $_REQUEST 中的变量通GET,POST 和 COOKIE 输入机制传递给脚本文件,因此可以被远程用户篡改而并不可信。

注意事项:不要经常使用$_REQUEST,如果不确定_GET/POST,你接收数据时候,可以这样:
if($_SERVER[' REQUEST_METHOD’]=="POST"){
  $echo $_POST['名字'];
 }else if($_SERVER[’ REQUEST_METHOD’]=="GET"){
  //用 _GET接收.
 }

五、$_SERVER
 $_SERVER中主要包含了Http请求行和消息头的信息,同时还有服务器自己的一些信息,比如DOCUMENT_ROOT, SCRIPT_FILENAME ..
<?php
 echo "<pre>";
 print_r($_SERVER);
 echo "</pre>";
?> 
案例说明:
1. 请获取请求该页面的客户机的ip地址:$_SERVER['REMOTE_ADDR ']
2. 请显示服务器端apache的版本号和php版本号:$_SERVER['???']
3. 请根据$_SERVER的REQUEST_METHOD  来决定使用_GET还是_POST方法接收数据。
4. 请利用$_SERVER 的HTTP_REFERER 来防止盗链行为。

六、$_ENV
    该全局数组可以获取环境变量,在php5.3中默认禁用,但是你可以启动,在php.ini文件中启用。
    在php5.3.5中,默认情况下不能使用$_ENV 你会得到空值,这是出于对安全的考虑。如果希望使用$_ENV可以通过 修改php.ini 的variables_order = "EGPCS" [EGPCS含义]。但是在开发和生产环境,我们不建议这样配置。
variables_order = "EGPCS"
<?php
 echo "<pre>";
 print_r($_ENV);
 echo "</pre>";
?>

七、$_FILE / $_COOKIE /$_SESSION
$_FILE与文件上传相关
$_COOKIE与COOKIE 相关
$_SESSION与SESSION相关
这几个超全局数组功能强大,在后面详细介绍。

八、$GLOBALS
包含了全部变量的全局组合数组。变量的名字就是数组的键[手册]。
同时一个自定义的全局变量,也会自动的被$_GLOBALS 管理。

案例:
<?php
 echo "aaaa";
 echo "<pre>";
 echo print_r($GLOBALS);
 echo "</pre>";
?>

当你定义一个全局变量,该变量也会被$GLOBALS管理。
<?php
 $a=900;
 echo “<pre>”;
 print_r($GLOBALS);
 echo “</pre>”
?>
<?php
function test() {
    $foo = "local variable";
    echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
    echo '$foo in current scope: ' . $foo . "\n";
}
$foo = "Example content";
test();
?>

【推荐阅读】陈力:传智播客古代 珍宝币 泡泡龙游戏开发第40讲:PHP中预定义超全局变量

陈力:传智播客古代 珍宝币 泡泡龙游戏开发第40讲:PHP中预定义超全局变量相关推荐

  1. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口 如果一个类使用abstract 来修饰,则该类就是抽象类.抽象方法是声明为abstract的,是不需要实现的,供子类继承且实现 ...

  2. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第22讲:PHP语法、数据类型(整型、布尔型、浮点型、字符串型)

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第22讲:PHP语法.数据类型(整型.布尔型.浮点型.字符串型) PHP语法是什么样的,有哪些数据类型,有些什么变量.本文对PHP语法.数据类型(整型.布尔型 ...

  3. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第48讲:PHP绘图技术

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第48讲:PHP绘图技术 php绘图坐标体系中,坐标原点位于左上角,以像素为单位.php绘图时,要创建画布.画出各种图形.输出图形.销毁图形(释放内存资源). ...

  4. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第26讲:PHP函数

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第26讲:PHP函数 什么是PHP函数,如何通过function定义一个函数,如何理解函数的调用过程.这些问题都是网站建设中经常遇到的程序设计问题.在进行网站 ...

  5. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第28讲:PHP数组

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第28讲:PHP数组 PHP程序设计语言中的数组如何创建,一维数组的引用,PHP数组变量,foreach语句,如何对数组进行排序等等知识都是贵阳网站建设中的主 ...

  6. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第30讲:PHP多维数组

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第30讲:PHP多维数组 在PHP程序设计语言中,如何创建二维数组呢,怎样使用二维数组,这些问题在网站建设中非常重要.二维数组的基本语法为: $a=array ...

  7. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第50讲:PHP中的xml编程

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第50讲:PHP中的xml编程 Xml是extensiable markup language的简称,包括文档声明.元素.属性.注释.CDATA区.特殊字符 ...

  8. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第十讲:深入理解盒子模型

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第十讲:深入理解盒子模型 摘要:通过前节<第九讲:块元素.行内元素.标准流.盒子模型>学习了前节介绍了贵阳网站建设中的DIV+CSS中类选择器.i ...

  9. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第38讲:PHP数据库编程mysql

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第38讲:PHP数据库编程mysql php程序设计语言为我们提供了mysql扩展库.mysqli扩展库.Pdo三种方式来操作mysql数据库.本文为贵阳网站 ...

最新文章

  1. rstudio 修改代码间距_Windows电脑使用Rstudio会有多少错误呢
  2. java crossdomin.xml_crossdomain.xml的配置详解
  3. c语言农夫过河游戏代码解释,农夫过河C++代码
  4. 【NLP】如何清理文本数据
  5. oracle v$ 表,【学习笔记】Oralce视图 查找分析V$PARAMETER视图的基表
  6. js中的cookie使用和vue-cookie的使用
  7. 机器学习算法--ALS
  8. 免费数学神器Mathpix发布移动版,一起来写更快的公式
  9. pytorch1.0神经网络保存、提取、加载
  10. Nodejs express、html5实现拖拽上传(转载)
  11. 3dm java32位_3DM游戏运行库合集安装包v2.3
  12. 利用高德制作GIS热力图
  13. Basler 工业相机与Python开发
  14. 单龙芯3A3000-7A1000PMON研究学习-(1)硬件原理图
  15. 电磁铁基础知识介绍及各系列性能比较
  16. C++ 重新定义继承而来的非虚函数
  17. 住宅IP和机房IP有什么区别,爬虫用哪种好?
  18. 鸿蒙四月几号升级啊,华为鸿蒙系统升级时间表 鸿蒙系统第二批升级时间是什么时候...
  19. 130个物联网示范项目上榜!工信部权威发布
  20. Ubuntu 18.04 与 Win10 双系统

热门文章

  1. 通配符证书配置Exchange2016 POP、IMAP加密模式
  2. win7 激活的两种方法
  3. 初玩SM2259XT2+B27A自制固态开卡成功,SM2259XT2量产工具和SM2258XT类似
  4. 从零开始搭建Cydia软件源+制作deb安装包
  5. 长安奔奔Mini维修手册
  6. 2020中国高校计算机大赛·华为云大数据挑战赛--热身赛 Rank7 思路及代码分享
  7. 人工智能机器人-智能时代的新纪元
  8. 嵌入式软件开发—— 应聘嵌入式软件工程师需要准备些什么?
  9. vi 跳到文件最后一行
  10. h5支付不能打开支付宝 ios_iOS 解决微信h5支付,支付宝h5支付无法直接返回APP的问题...