一、基本知识
1、定义
编程语言中的变量相当于容器,承载变化的内容。
变量是怎么实现的?PHP的变量是使用C语言里面的结构体实现的。结构体里面有个指针,判断这个变量在几个地方使用了,如果这个指针的值为0,那么表示真个变量无效,被删除了。
PHP的变量的申明一般和赋值是一起的。
php不需要指定数据类型。但是PHP变量是有类型的。PHP变量的类型是由他存储的值决定的。
由于这种特性,PHP也称之为弱类型语言。
$name = "zhangsan";
$age = 18;
2、命名规则
PHP的变量命名规则遵循标识符命名规则(标识符:程序运行过程中所起的名字。如:变量名,函数名,常量名)
字母数字下划线组成,不能使用数字开头
严格区分大小写
不能使用系统关键字
建议使用驼峰法命名
也可以使用下划线命名法
建议使用英文,要见文知意。
3、变量的操作
获取变量的值
$name = "zhangsan";
echo$name;
修改变量值
$age = 18;
$age = 19;
删除变量
unset(变量名);
unset($name);
注意: 删除变量只是删除变量与值之间的联系。
但是变量的变量名与值并没有删除,PHP自己的垃圾回收机制会自动回收变量名与值的内存。
4、可变变量
$ergouzi = "zhangsan";
$zhangsan = "lisi";
$lisi = "wangwu";
$wangwu = "zhaoliu";
$$$ergouzi = ? //wangwu
二、变量存储
1、内存组成
栈区代码区全局数据区堆区
存放变量名、常量名、函数名函数、方法等存放数据数组、对象
全局数据区又分为
变量区、静态变量区、常量区
2、存储过程
$a = 100;
当定义一个变量并赋值的时候内存放生的事情
在栈区里存储一个变量名$a
在全局数据区里面的变量区里存入变量值100
给这个100的值生成一个地址
把这个地址存到栈区跟$a建立链接
相当于变量名和变量值是通过地址这个中间媒介联系在一起的
三、变量传递
1、值传递
$num = 100;
$money = $num;
$num = 120;
$money = ?
存储过程解析
变量名$num存入栈区
全局数据区的变量区存入变量值100;
给100分配一个地址,比如ox1001110111;
把地址ox1001110111存入栈区,与变量名$num建立链接
把变量名$money存入栈区
把变量值100复制一份,并分配一个新的地址,比如ox111001000;
把地址ox111001000存入栈区,与变量名$money建立链接
把ox1001110111地址下的值100改为120;
问$money的值是多少?显然,变量num的值100赋给变量money后,变量num和变量money就没有任何关系了。所有num值怎么变都不会影响money的值了。所以变量money的值是100
2、引用传递
$num = 100;
$money = &$num; 注意&符
$num = 120;
$money = ?
存储过程解析
变量名$num存入栈区
全局数据区的变量区存入变量值100;
给100分配一个地址,比如ox1000101101011;
把地址ox1000101101011存入栈区,与变量名$num建立链接
把变量名$money存入栈区
把地址ox1000101101011存入栈区,与变量名$money建立链接
把ox1000101101011地址下的值100改为120;
显然:变量num 和 变量money用的是同一个地址。所以money的值会岁num的值变化而变化。此时money的值为120
变量值传递
两个变量使用不同的地址,改变一个对另一个没影响
变量引用传递
两个变量使用相同的地址,改变一个对另一个有影响
四、php预定义变量
1、$_SERVER 服务器相关信息
echo"<pre>"; //pre作用,使代码按原来格式输出
var_dump($_SERVER_);
[‘HTTP_HOST’] 主机名
[‘SERVER_NAME’] 服务器的名称
[‘SERVER_ADDR’] 服务器的ip地址 ::1 === 127.0.0.1
[‘SERVER_PORT’] 服务器端口
[‘REMOTE_ADDR’] 客户机的地址
[‘DOCUMENT_ROOT’] web的代码根目录
[‘REQUEST_METHOD’] 请求网页的方式
[‘REQUEST_URI’] 请求的具体URI部分。
2、$_GET
3、$POST
http表单提交使用get或者post方式提交数据,可以使用这两个预定义变量来接收
4、$_REQUEST
post或者get提交的数据都能够接受。
五、inset()测试一个变量是否被设置
变量未设置或者为null返回false,其他情况返回true
var_dump(inset(变量));
六、empty()判断变量是否为空
逻辑判断为false的变量,使用empty返回的都是true
网友评论