PHP变量作用域与地址引用问题解析
注意:static $b=0 这一赋值操作只会在变量第一次被初始化的时候执行。 附A:类中静态成员和静态方法,差不多只是调用的时候统一使用类名或者self或者parent加::xxx,他们的作用域和这个一样,但是他的声明是在方法外部的 附B:js里面的作用域使:用var aa=‘xxx';在函数外面声明的就是全局变量(不管是否带有修饰符var)。在函数内部使用 var声明的是局部变量,不使用var修饰的是全局变量。 附C:关于PHP引用 PHP引用:就是在变量、函数或者对象前加&.php中的引用就是想用不同的名字访问同一个变量的内容。 1、变量的引用:
2、函数的传址调用
3、函数的引用返回
解析: 使用$a=test()得到的其实不是函数的引用返回。只是将函数的返回值复制给$a,而不会影响到$b。这样调用和普通的调用没区别。 Php规定:$a=&test()方式得到才是函数的引用返回。他将$b变量的内存地址和$a变量的内存地址指向了同一个地方。即相当于$a=&$b; 4、取消引用
解析: unset一个引用,只是取消了变量名和变量的内容之间的绑定,并不意味着内容被销毁,其值还是真实存在的。 5、global引用: 使用global $var 声明一个变量时,其实就是建立了一个到全局变量的引用。
6、对象的引用: 在对象的方法中,$this调用的对象都是调用它的引用 注:php中对于地址的指向不是由用户自己来实现的,而是通过zend核心实现的,php的引用采用的是“写拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或对象是不会被拷贝的。 例子: $a = 1; $b =$a;$a和$b都是指向同一个内存地址,并不是$a和$b占用不同的内存。 若是现在执行一句$a=”dsd”:$a和$b所指向的内存数据需要重新写一次,此时zend核心会自动判断。自动为$b产生一个$a的数据拷贝,重新申请一块内存进行存储。 有关php变量作用域以及php引用的内容,就介绍这些了,希望对大家有所帮助。 |
下一篇: nodeJS之TCP模块net实例详解