预定义变量
综述:
1:预定义变量又叫超全局变量,包括:
$_GET, $_POST, $_SERVER, $_REQUEST, $GLOBALS, $_COOKIE, $_SESSION,
……….(大约 10 个)
2:作用域问题
PHP 中,自定义的变量的作用域,分两种:全局作用域 (函数外),局部作用域 (函数内)。
但:
预定义变量的作用域称为 "超全局作用域":全局作用域 + 局部作用域的总和 (函数内外全都可用)
3:数据类型问题:
超全局变量都是数组!
形式一:
- <form action="abc.php" method="get">
- 项目1:
- <input type="text" name="uName" />
- 项目2:
- <input type="password" name="uPswd" />
- <input type="submit" value="提交" />
- </form>
其作用是:用户填写表单数据,并提交后,会将数据发送 (提交) 给页面 abc.php,其实也可以理解为 "打开" 该网页(abc.php),还可以理解为 "请求" 该网页(abc.php)
形式二:
- <a href="abc.php?uName=test1&uPswd=123">
- 文字。。。
- </a>
其作用是:用户点击链接后,会将数据发送(提交)给页面 abc.php,其实也可以理解为 "打开" 该网页(abc.php),还可以理解为 "请求" 该网页(abc.php),这种请求也是 get 请求
形式三:
- <script>
- location.href = "abc.php ? uName = test1 & uPswd = 123"; //利用location对象的属性href
- </script>
其作用是:当该行语句执行的时候(通常其实是在函数中),会将数据发送(提交)给页面 abc.php,其实也可以理解为 "打开" 该网页(abc.php),还可以理解为 "请求" 该网页(abc.php),这种请求也是 get 请求
形式四:
- <script>
- location.assign("abc.php ? uName = test1 & uPswd = 123"); //利用location对象的方法assign()
- </script>
其作用是:当该行语句执行的时候(通常其实是在函数中),会将数据发送(提交)给页面 abc.php,其实也可以理解为 "打开" 该网页(abc.php),还可以理解为 "请求" 该网页(abc.php),这种请求也是 get 请求
不管哪种形式的 get 提交过来的数据,获取数据是一样的: (在 abc.php 网页中)
- <?php$v1=$ _GET['uName']; //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)$v2=$ _GET['uPswd'];
- //该键名必须跟提交的时候的名字完全一致(区分大小写)?>
$_POST 变量(数组)
类似 GET 变量 (数组),_POST 代表页面通过 post 方式提交过来的数据所形成的数组。
post 提交数据,通常只有一种形式:
- <form action="abc.php" method="post">
- 项目1:
- <input type="text" name="uName" />
- 项目2:
- <input type="password" name="uPswd" />
- <input type="submit" value="提交" />
- </form>
其作用是:用户填写表单数据,并提交后,会将数据发送 (提交) 给页面 abc.php,其实也可以理解为 "打开" 该网页(abc.php),还可以理解为 "请求" 该网页(abc.php)
接收 post 数据的形式为: (在 abc.php 网页中)
- <?php$v1=$ _POST['uName']; //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)$v2=$ _POST['uPswd'];
- //该键名必须跟提交的时候的名字完全一致(区分大小写)也可以显示所有post数据:var_dump($_POST)?>
$_REQUEST 变量(数组)
REQUEST 数组,其实并不是一个独立的数据来源,而是_POST 数据和 GET 数据的 "总和" 即_REQUEST 数组中包括了所有 POST 数据和_GET 数据——其实是由系统内部自动存储的。
通常,POST 数据和_GET 数据不会 "同时出现",$_REQUEST 数组就代表了其中之一。
下面来看看:get 和 post 数据同时提交的情形:
此时,一般就只有一种 html 语法形式会出现该情形,如下:
… 项目 1: 项目 2:
则此时,uName 和 uPswd 两个数据以 post 方式提交给 abc.php,
并,同时:a=5 和 b=10 两个数据,以 get 方式提交给 abc.php
则在页面 abc.php 中:
这样取得 get 数据:
v1=_GET['a'];
v2=_GET['b'];
这样取得 post 数据:
v3=_POST['uName'];
v4=_POST['uPswd'];
但,也可以这样取 (全有了):
v1=_REQUEST['a'];
v2=_REQUEST['b'];
v3=_REQUEST['uName']
v4=_REQUEST['uPswd']
当 get 数据和 post 数据同时提交并其中有重名的时候,情况怎么样呢
说明:
1,尽量避免重名;
2,如果重名了,此时 $_REQUEST 只会记录 (存储) 其中一个数据(要么 post 数据,要么 get 数据)
3,至于记录的是哪个,是有 php.ini 中的一个设置项来决定:
3.1 request_order = "GP"; // 这是默认值,G 代表 GET,P 代表 POST
3.2 含义是:先存储 GET 数据,再存储 POST
3.3 可见如果重名,此时 POST 就会覆盖 GET 数据
3.4 改为:request_order = "PG", 顺序反过来
然后去 php.ini 中,修改为:request_order = "PG"
同样的数据,结果却为:
$_SERVER 变量(数组)
该变量存储了服务器端或客户端的一些请求信息或设置信息,比较多,而且不同的服务器和不同的请求页面,其数据项都可能不同。
• 常用的有:
o REMOTE_ADDR, 用户的 IP 地址
o SERVER_ADDR: 服务器端的 IP 地址
o SERVER_NAME: 服务器名 (主机名)
o DOCUMENT_ROOT: 站点绝对路径 (其实就是主机设置中的 DocumentRoot
o PHP_SELF:当前网页的文件路径
o QUERY_STRING: 表示一个 get 请求的整体字符串,类似这样:
http://www.abc.com/abc.php?a=5&b=10 连接地址中的 "a=5&b=10"
• 输出所有项 (可能每台服务器有所差异)
$GLOBALS 变量(数组)
似乎是一个多余的变量:它只是把我们自己定义的所有全局变量存储到该数组中:
变量名就是该数组的下标 (键名),变量值就是对应的值。
常量
含义:用于存储一个不会变化也不希望变化的数据的标示符。
常量命名规则,同变量,但习惯说,常常将常量的名称使用 "全大写" 形式。
定义形式
• 使用 define() 函数定义
o 使用形式:define("常量名", 常量值);
o 推荐常用名使用全大写形式
• 使用 const 语法定义
o 使用形式: const 常量名 = 常量值;
o 但 const 语法只能在"最顶层" 的代码域中使用(不能在大括号中)
o 也即,const 语法不能在函数中或条件语句中或其他表示一个 "范围" 的语句中使用
使用常量:
两种形式:
• 直接使用名字
• 或使用 constant() 函数:constant(" 常量名 ")
常量变量的区别:
• 定义形式不同:
• 使用形式不同:常量无需 $ 符号
• 可变程度不同:常量的值不可以改变,常量也不可以销毁
• 作用范围不同:常量具有超全局作用域 (函数内外都可以直接使用)
• 可用类型不同:常量只能存储标量类型:int,float,string,bool
判断常量是否存在:defined()
判断的结果为布尔值。
常用形式:if (defined (某常量名) == false ){….. 这里可以去定义该常量;}
实际上,可以这样:
$result = defined (某常量名); // 结果是 true 或 false
使用一个未定义的常量 (特殊情况):
使用一个未定义的常量会报一个错误 (notice 错误)——跟使用一个未定义的变量一样——当然不推荐。
但是:
php,此时会得到一个意想不到的结果:似乎该常量存在,并该常量的值就是该名字。
预定义常量:
php 语言中,预定了大量的常量,可以直接使用。
其中有些常量,是需要某些模块打开之后才有 (比如 MySQL 模块)
• 比如 M_PI(圆周率), PHP_OS(操作系统), PHP_VERSION(php 版本号),PHP_INT_MAX(php 中的最大的整数值)
• 参考手册〉附录〉保留字列表〉预定义常量
魔术常量
魔术常量其实是一种值会随着一定的条件 (环境) 而变化的常量,形式和使用上是常量,但实际上,其值会改变。
• 比如:__DIR__(当前网页文件的所在目录),__FILE__(当前网页文件),__LINE__(当前这一行)
• 魔术常量其实类似变量,其值随着不同代码而变化,不区分大小写
• 参考手册〉语言参考〉常量〉魔术常量
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: