PHP笔记之变量
注意该笔记只记录重点部分:
目录
变量:
判断isset(变量名):
作用:判断该变量是否存在,或该变量是否有数据值!存在或有数据值,就是true,否则就是false
补充:对比 isset() 与 empty()
isset(变量):判断变量是否存在,或变量是否为空(null);如果存在,就是true,否则就是false
empty(变量): 判断变量的“内容”是否为空的(不是null的空,而是没有内容),基本上,是一些硬性规定,如下数据都是“空的”: 0, “”, “0”, false, null, array()空数组也是空
如果一个变量内容是空的,empty()返回的结果是true,否则是false
删除unset(变量名):
含义:删除一个变量,并不是指将该变量从程序中删掉,而是,“断开”该变量名跟该变量原有的数据值之间的“引用关系”(联系)!,此时,会有这样的结果:
1,该变量名已经不指向(引用)任何数据了,则此时其isset()判断的结果就是false
2,该数据(可能)没有任何变量指向它了,就成为“无法使用的数据”——通常就被自动回收了
$v1 = 1;
unset($v1);
$s1 = isset($v1); //false
变量的传值方式:
1,变量的传值方式,是指“一个变量,传给另一个变量”的内部细节形式——单对单;
2,变量的传值方式,只有2种:值传递,引用传递;
值传递
$v1 = 1;
$v2 = $v1; //这就是值传递
简单理解:将$v1的值取出来(注意:$v1中的值还在),然后再用该值给$v2赋值。
图示理解:
可见,值传递,就是变量v1的值进行了复制,然后在给另一个变量v2赋值。
注意:
1这两个变量此时是值相等的;
2这两个变量又是互相独立的——互不影响;
即$v1 = 10; 则echo $v2 ;//输出1
引用传递
php中,只有一种语法形式可以实现变量的引用传值方式:&符号。
举例如下:
$m1 = 1;
$m2 = & $m1; //引用传值方式
简单理解: 将变量$m1跟其数据值之间的“引用关系”,复制一份,再给予变量$m2,即,此时,变量$m2也同样具有跟原来数据的一个“引用关系”(指向关系);
图示理解:
结果是:
1,此时仍然有了2个变量,但只有一个数据值(数据空间),2个变量都共同指向该数据空间。
2,对其中任何一个变量的操作,其实都是在操作该数据值(空间);
代码对比演示:
注:var_dump()是程序员用来调式代码用的
可变变量:
$s1 = “abc”; //这是一个变量,里面存储的是字符串”abc”
$abc = 10; //
echo $$s1; //???,输出10
理解:
1,在php中,一个”$”后面,总是跟着一个变量名!
2,这里,echo输出的这个变量(以第一个$为标识)的名字是:$s1, 即”abc”
3,所以,这里输出的是 $abc, 即 10
4,这种连续出现“$”的变量形式,就是所谓的“可变变量”;
预定义变量
所谓预定义变量,其实指,php这个语言工具中,预先就定义好的变量;
我们只是“拿来使用”。
综述:
1.主要有:$_GET, $_POST, $_REQUEST, $_SERVER, $GLOBALS,(注:也就是php中的9大全局数组,这里先介绍其中的5个)
2.均是数组
3.系统定义与维护——即我们不应该其给其赋值或销毁其值,只应该去“用其值”。
4.具有超全局作用域——哪里都可以使用。
5.不同情形下可能具有不同的值
$_POST变量
含义:
它代表用户通过表单以post方式( method=”post” )提交的时候所提交的所有数据——这个称为post数据。
基本演示:
7form_post.html页面:
8post_data.php页面及输出结果为:
$_GET变量
含义:
它代表用户通过get方式( 有5种get形式 )提交的时候所提交的所有数据——这个称为get数据。
小提示:get,post没有翻译!
提交get数据有5种形式:
形式1:
<form action="目标文件.php" method="get">
<input type="text" name="data1" />
<input type="text" name="data2" />
<input type="submit" value="提交" />
</form>
这种形式的get数据,跟post数据类似,数据内容由用户填写或选择而得到!
形式2:
<a href=”目标文件.php?data1=5&data2=cctv&age=18”>链接文字</a>
说明:
1,它只是一个链接而已,只是在链接文件名的后面加上“?”,然后一个一个“串接数据”;
2,数据形式为:数据项名称=数据值, 相互之间用“&”符号隔开
3,这种形式的数据也同样是“点击链接”就提交的get数据,但用户只能选择点还是不点,而不能修改数据。
形式3:
<script>
location.href = “目标文件.php?data1=5&data2=cctv&age=18”;
</script>
说明:
1,该语句可以看做是通过js技术实现的页面跳转功能,跟a标签的连接功能完全一样!
2,其中该语句,通常都是放在一个函数中,然后因为某个事件发生而去调用该函数!
形式4:
<script>
location.assign( “目标文件.php?data1=5&data2=cctv&age=18”);
</script>
说明:
该语句其实跟形式3完全一样功能,只是location这个对象实现页面跳转的另一个语法形式而已!
形式5:php的跳转语法
<?php
//语法形式: header(“location: 目标网页地址”);
header(“location: 目标文件.php?data1=5&data2=cctv&age=18”);
?>
小结:
上述多种get形式提交数据,都要理解为:
跳转到某个页面,并“同时”携带(提交)一定的get数据过去!
不管哪种形式的get数据提交,接收get数据,都只有一种形式,跟post类似:
$v1 = $_GET[‘数据项名称’]; //取得一个get数据项的值;比如$_GET[‘data1’], $_GET[“age”]; 也可以“输出”所有get数据:
print_r($_GET); 或 var_dump($_GET);
$_REQUEST变量
含义:
一句话,它是$_GET变量和$_POST变量数据的“合集”:即,它里面同时存储了这两种数据。
结果为:
如果表单为get提交方式:
结果为:
怎么能同时具有get和post数据呢?
只有一个方式:
<!--以下action中的?号后面的数据都会以get方式提交-->
<form action=”目标文件.php?data1=5&data2=cctv&age=18” method=”post”>
<!--以下表单项的数据都会以post方式提交-->
<input type=”text” name=”n1” />
<input type=”text” name=”n1” />
<input type=”submit” value=”提交” />
</form>
举例:
提交后结果为:
request数据取值时,跟get数据和post也完全一样!
$_REQUEST[‘数据项名称’];
当post数据和get数据的数据项名称相同时(其实我们反对这么做),默认是post数据覆盖了get数据。
不过这个状况同样可以在php.ini中设置:
默认时:
可修改为:
$_SERVER变量
含义:
它代表在一次浏览网页的过程中的浏览器端的一些信息或服务器端的一些信息。
我们只是在程序中可以拿到这些信息,并用于编程所需!比如:取得用户的访问IP地址。
注意:
这种信息,随着不同的页面,和不同的服务器,以及不同的时刻,都可能不同!
要求:
大约有30个左右的信息,我们只要知道其中5个左右!主要有:
$_SERVER[‘REMOTE_ADDR’]:获取访问者的ip地址
$_SERVER[‘SERVER_ADDR’]:获取服务器所在的ip地址
$_SERVER[‘SERVER_NAME’]:获取服务器的名字,其实就是站点设置中的servername
$_SERVER[‘DOCUMENT_ROOT’]:获取站点的真实物理地址,其实就是站点设置中的documentroot
$_SERVER[‘PHP_SELF’]:获取当前网页地址(不含域名部分)
$_SERVER[‘SCRIPT_FILENAME’]:获取当前网页地址物理路径
$_SERVER[‘QUERY_STRING’]获取当前网页地址中的所有get数据(就是?号后面部分),但只是一个整体的字符串而已。
查看所有信息:
第二种查看信息的方式(这样更好看):
$GLOBALS变量
含义:
它也是一个“重复性数据”,它里面存储了我们自己定义的所有“全局变量”。
举例:
$v1 = 1; //定义了一个全局变量,
此时,就有了这样一个数据:$GLOBALS[‘v1’],其值就是1
echo $v1 ; //输出1
echo $GLOBALS[‘v1’]; //输出1
这个变量,主要是用于在局部范围不可以使用全局变量的时候,又需要该全局变量的值,此时就可以用它来取得该全局变量的值。
再定义一个新的变量: