php 变量使用及引申点

来源:互联网 发布:如何解决网络安全问题 编辑:程序博客网 时间:2024/04/30 13:32

1、变量的传值和引用

首先,要理解变量名存储在内存栈中,它是指向堆中具体内存的地址,通过变量名查找堆中的内存;
普通传值,传值以后,是不同的地址名称,指向不同的内存实体;
引用传值,传引用后,是不同的地址名称,但都指向同一个内存实体;改变其中一个,另外一个就也被改变;

按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
按引用传递则不需要复制值,对于性能提高很有好处


<?php//普通传值$param1=1; $param2=2; $param2 = $param1; $param1 = 5; //变量1和变量2是两块内存,互不影响;echo $param2; //所以此处还是显示为1//引用传值 ↓↓$param1=1; $param2=2; $param2 = &$param1; //把变量1的内存地址赋给变量2;此时的变量2和变量1全等;echo $param2;// 1$param1 = 5; //变量1和变量2是一处内存,改变其中一个,另外一个也被改变;echo $param2; //显示为5


2、变量的类型转换和判断类型方法
判断类型的方法:
1.gettype 方法判断
2.is_array、is_string、is_int、is_double


类型转换
1.在要转换的变量之前加上用括号括起来的目标类型
2.使用3个具体类型的转换函数,intval()、floatval()、strval()
3.使用通用类型转换函数settype(mixed var,string type)


3、unset、isset、empty、is_null、defined 各自用途
3.1、empty
如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,”"、0、”0″、NULL、FALSE、array()、var $var、未定义;以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。
3.2、is_null
1、它被赋值为NULL
2、它还没有赋值
3、它未定义,相当于unset()
以上3种情况,isset为TRUE,其它情况都为FALSE
3.4、isset
如果 变量 存在(非NULL)则返回 TRUE,否则返回 FALSE(包括未定义)
3.5、unset
$a = 1; $b = & $a;
unset($a),$b是否还是1,为什么?
unset($b),$a是否还是1,为什么?
都等于1。
在php中,引用赋值不同于指针的感念,他只是将另一个变量名指向了某个内存地址。此题中:$b = &$a;只是将$b这个名字也指向了$a变量所指向的内存地址。
unset时只是释放了这个名字的指向,并没有释放内存中的值。另一方面讲unset($a),其实也并未真正立刻释放内存中的值,也只是释放了这个名字的指向而已,
该函数只有在变量值所占空间超过256字节长的时候才会释放内存,并且只有当指向该值的所有变量(比如有引用变量指向该值)都被销毁后,地址才会被释放。
3.6、defined
检测是否设置常量

3.7、下图是针对这几个方法的用途举例



4、echo(),print(),print_r()的区别
echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)  
    print()    只能打印出简单类型变量的值(如int,string)  
    print_r() 可以打印出复杂类型变量的值(如数组,对象)  
    echo     输出一个或者多个字符串

原创粉丝点击