变量
变量是包含一个名称和一个值的“标识符”。在php中,可理解为
使用a1变量就是指使用a1来指代2这个数据,对a1进行运行就是对2进行运算如:
$a1++; //将a1的值自加一变为3然后返回赋值给a1
形式:变量必须以$开头,后面紧跟变量名
注意:在php中,只要出现$符号,其后面紧跟的符号便会识别为一个变量。如:
echo “你好$money” //money便会被识别为一个变量,因为不存在money这个变量会出现问题
基本变量使用
- 定义变量:直接给变量赋值就是定义,不支持js中的定义形式:定义但不赋值的语法。
- 取值:所有需要变量值的语句中可以取值,包括:输出:echo $n1;给其他变量赋值:$n2=$n1;参与运算:$n3=$n1+3;
- 判断变量是否存在,isset():存在返回true,否则返回false(实际上,如果一个变量的值为null,返回的也是false)
- 修改变量值(赋值):第二次及以后跟一个变量赋值就是修改变量值。
- 删除unset():断开变量名与数据的引用关系
命名规则
通常命名包括变量名、函数名、常量名、类名、接口名等等
基本规则
行业规则(潜规则)
基本规则保证语法的正确性,行业规则更加买账
如下:
1.驼峰命名法:示例:name,myName,myFatherName
2.帕斯卡命名法:示例:Name,MyName,MyFatherName
3.下划线间隔法:示例:name,my_name,my_father_name
变量间的传值方式
说明:PHP中所有变量默认都是值传递
值传递
将一个变量的数据拷贝给另一个变量,代码如下:
- 只能使用大小写字母,下划线和数字
- 数字不能开头
- 不能跟关键字重名的(if,function,else)
v1和v2只是数据相同,这两个变量没有关系(互相独立)
引用传值
将一个变量的引用关系拷贝一份赋值给另一个变量
赋值之后,两个变量指向同一个数据,对其中任意一个变量执行操作,两个变量都会改变。如:
结果为:
另外,在这种情况下,unset()一个变量,但另一个跟它有关的变量不受影响,测试:
结果为:
可变变量
所谓可变变量,就是一个变量的名又是一个变量
可变变量的语法是php中一种特殊的语法--其他语言很少见
$v1="abc"; //字符串变量,内容是字符串“abc”
$abc=10; //普通变量
echo $$v1; //此时,就所谓可变变量
echo 双引号里不能识别函数,可识别变量
预定义变量
综述:
1.预定义变量又叫超全局变量,包括:$_GET,$_POST,$_REQUEST,$GLOBALS,$_COOKIE,$_SESSION
2.作用域:PHP中,自定义变量的作用域分两种:全局作用域(函数外),局部作用域(函数内)。但预定义变量的作用域称为“超全局作用域”:全局作用域(函数外),局部作用域(函数内)
3.数据类型问题:超全局变量都是数组
$_GET变量(数组):
get常常体现用户提交数据,通常出现在:<form action="abc.php" method="get">.........</form>,“表单以get方式提交数据”
则$_GET该预定义数组变量指以这种方式提交的所有数据的集合(数组)
注意:get这个词似乎没有中文翻译
实际上,在网页中以get方式提交数据有多种
形式一:
<form action="abc.php" method="get">
项目一:<input type="text" name="uName" />
项目二:<input type="password" name="uPswd" />
<input type="submit" value="提交">
</form>
结果为:
作用:用户填写表单数据并提交后,会将数据发送提交给页面(abc.php),也可以理解为打开abc.php网页
形式二:
<a herf="abc.php"?uName=test1&nPswd=123>文字</a>
作用:用户点击链接,会将数据发送提交给页面(abc.php),也可以理解为打开abc.php网页
形式三:
<script>
location.herf="abc.php"?uName=test1&uPswd=123; //利用location对象的属性herf
</script>
作用:用户点击链接,会将数据发送提交给页面(abc.php),也可以理解为打开abc.php网页
形式四:
<script>
location.assign="abc.php"?uName=test1&uPswd=123; //利用location的方法assign
</script>
作用:用户点击链接,会将数据发送提交给页面(abc.php),也可以理解为打开abc.php网页
不管是以哪种形式get提交过来的数据,获取数据是一样的:(在abc.php中)
<?php
$V1=$_GET['uName'];
$v2=$_GET['uPswd'];
?>
举例:代码如下
get_2.php文件中的代码:
结果运行:
点击提交运行get_2.php文件:
$_POST变量
类似$_GET变量,$_POST代表页面通过 post方式提交过来的数据形成的数组,post提交数据通常只有一种形式
<form action="abc.php" method="get">
项目一:<input type="text" name="uName" />
项目二:<input type="password" name="uPswd" />
<input type="submit" value="提交">
</form>
作用:用户填写表单数据并提交后,会将数据发送提交给页面(abc.php),也可以理解为打开abc.php网页
abc.php接受数据的形式为:
<?php
$V1=$_GET['uName'];
$v2=$_GET['uPswd'];
?>
通常网页中的form表单一般用post方式,get方式主要体现在其他三种形式上
案例:设计一个页面,对2个数据进行基本运算,使用post方式
代码:post_1.php
运行post_2.php文件
运行post_1.PHP文件显示:
点击提交结果为:
$_REQUEST变量
$_REQUEST数组中包括了所有$_POST数据和$_GET数据--其实是由内部系统自动存储,通常$_POST数据和$_GET数据不同时出现的时候,$_REQUEST就代表其中一个。(用户无论是以post或者get方式数据发送都可以用$_REQUEST接收)
下面看get和post数据同时提交的情况:
<form action="abc.php"?a=5&b=10 method="post">
项目一:<input type="text" name="uName" />
项目二: <input type="password" name="a">
<input type="submit" value="提交">
</form>
此时,uName和a两个数据已post方式提交给abc.php,同时另一个a和b以get方式提交给abc.php,则在abc.php中,取得数据的方式有:
1.$v1=$_GET['a'];
$v2=$_GET['b'];
$v3=$_POST['uName'];
$v4=$_POST['a'];
2.$v1=$_REQUEST['a'];
$v2=$_REQUEST['b'];
$v3=$_REQUEST['uName'];
$v4=$_REQUEST['a'];
这时以第二种方式发现get方式和post方式发送的数据有重名,解决方案如下:
1.尽量避免重名
2.如果重名,此时$_REQUEST['a']只会记录一个数据,且记录的数据由php.ini文件的配置决定
2.1由request_order决定,当request_order=“GP”,表示先get数据后post数据,则get数据会被post数据覆盖;反之post数据会被get数据覆盖
示例代码:
运行查看request数组:
反之,修改php.in配置为request_order=“GP”。运行结果为:
**$_POST,$_GET,$_REQUEST三者相互独立,也就是说任意unset()其中一个变量,任意两个不受影响
$_SERVER变量(数组)
该变量存储了客户端的一些请求信息或设置信息,不同服务器、不同网页上的数据可能不同
常用
- REMOTE_ADDR,用户的ip地址
- SERVER_ADDR,服务器端的ip地址
- SERVER_NAME,服务器名
- DOCUMENT_ROOT,站点绝对路径
- PHP_SELF,当前网页的文件路径
- QUEER_STRING,表示一个get请求的整体字符串,类似:http://www.abc.com/abc.php?a=5&b=10链接地址?后面的全部
输出所有项
$_GLOBALS变量(数组)
把定义的所有全局变量存储到$_GLOBALS数组中:变量名就是该数组的下标,变量值就是对应的值
常量
含义:用于存储一个不会变化也不希望变化的数据的标识符
命名规则同变量,但通常习惯于将常量的名称用“全大写形式”
定义形式
- 使用define()函数定义:使用形式:define("常量名",常量值);推荐常用名使用全大写模式
2.使用const语法定义:使用形式:const 常量名=常量值;const语法只能用在顶层域中(即大括号外);const语法不能在函数或条件语句或其他表示一个范围的语句中使用
常量的使用
- 直接使用名字
- 使用constant()函数:constant(“常量名”);
常量和变量的区别
- 定义形式不同:
- 使用形式不同:常量无需$符号
- 可变程度不同:常量的值不需要改变,常量也不可以销毁
- 作用范围不同:常量具有超全局作用域(函数内外都可直接使用)
- 可用类型不同:常量只能存储标量类型:int,float,string,bool
判断常量是否存在:defined()
判断的结果为bool值
常用形式:if(defined(某常量名)){....定义该常量}
实际可以这样:$result=defined(常量名); //结果是true或者false
使用一个未定义的常量(特殊情况):
使用一个未定义的常量会报一个错误(notice错误)--跟使用一个未定义的变量一样,但是,php会得到这样一种结果:似乎常量存在,常量的内容就是常量名:
预定义常量
php语言中预定了大量的常量可直接使用
某些常量需要打开某些模块(mysql模块)
魔术常量
一种值会随着一定的条件(环境)而变化的常量,形式上是常量,但实际上其值会改变
比如:__DIR__(当前网页文件所在目录),__FILE__(当前网页文件),__LINE__(当前行号)(两个下划线)
魔术常量类似为变量,在不同位置的值不同
结果为:
- 如M_PI(圆周率),PHP_OS(操作系统),PHP_VERSION(php版本号),PHP_INI_MAX(php中最大整数值)
- 参考手册>附录>保留字列表>预定义常量