PHP引用(&)各种用法方法实例详解_.docx

上传人:re****.1 文档编号:548029634 上传时间:2023-02-17 格式:DOCX 页数:18 大小:17.69KB
返回 下载 相关 举报
PHP引用(&)各种用法方法实例详解_.docx_第1页
第1页 / 共18页
PHP引用(&)各种用法方法实例详解_.docx_第2页
第2页 / 共18页
PHP引用(&)各种用法方法实例详解_.docx_第3页
第3页 / 共18页
PHP引用(&)各种用法方法实例详解_.docx_第4页
第4页 / 共18页
PHP引用(&)各种用法方法实例详解_.docx_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《PHP引用(&)各种用法方法实例详解_.docx》由会员分享,可在线阅读,更多相关《PHP引用(&)各种用法方法实例详解_.docx(18页珍藏版)》请在金锄头文库上搜索。

1、PHP引用(&)各种用法方法实例详解_ php的引用(就是在变量或者函数、对象等前面加上符号),在PHP 中引用的意思是:不同的名字访问同一个变量内容。与C语言中的指针是有差别的C语言中的指针里面存储的是变量的内容,在内存中存放的地址 php的引用(就是在变量或者函数、对象等前面加上符号),在PHP 中引用的意思是:不同的名字访问同一个变量内容。与C语言中的指针是有差别的C语言中的指针里面存储的是变量的内容,在内存中存放的地址。 1.变量的引用 PHP 的引用允许你用两个变量来指向同一个内容 代码如下:? $a=ABC; $b =$a; echo $a;/这里输出:ABC echo $

2、b;/这里输出:ABC $b=EFG; echo $a;/这里$a的值变为EFG 所以输出EFG echo $b;/这里输出EFG ? 2.函数的引用传递(传址调用) 传址调用我就不多说了 下面挺直给出代码 代码如下:?php function test($a) $a=$a+100; $b=1; echo $b;/输出 test($b); /这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里转变$a的值就可以转变$b的值了 echo br; echo $b;/输出101 ? 要留意的是,在这里test(1);的话就会出错,缘由自己去想。 留意:上面的“ test($b); ”

3、 中的$b前面不要加 符号,但是在函数“call_user_func_array”中,若要引用传参,就得需要 符号,如下代码所示: 代码如下:?php function a($b) $b+; $c=0; call_user_func_array(a,array($c); echo $c; /输出 1 ? 3.函数的引用返回 先看代码 代码如下:?php function test() static $b=0;/申明一个静态变量 $b=$b+1; echo $b; return $b; $a=test();/这条语句会输出$b的值为 $a=5; $a=test();/这条语句会输出$b的值为2

4、$a=test();/这条语句会输出$b的值为3 $a=5; $a=test();/这条语句会输出$b的值为6 ? 下面说明下: 通过这种方式$a=test();得到的其实不是函数的引用返回,这跟一般的函数调用没有区分至于缘由:这是PHP的规定 PHP规定通过$a=test(); 方式得到的才是函数的引用返回 至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应当被绑定在哪一个变量上面时。) 这句狗屁话害我半天没看懂 用上面的例子来说明就是 $a=test()方式调用函数,只是将函数的值赋给$a而已,而$a做任何转变都不会影响到函数中的$b 而通过$a=test()方式调用函

5、数呢, 他的作用是将return $b中的$b变量的内存地址与$a变量的内存地址指向了同一个地方 即产生了相当于这样的效果($a=$b;) 所以转变$a的值也同时转变了$b的值所以在执行了 $a=test(); $a=5; 以后,$b的值变为了5 这里是为了让大家理解函数的引用返回才用法静态变量的,其实函数的引用返回多用在对象中 另附一个php官方例子: 代码如下:This is the way how we use pointer to access variable inside the class. ?php class talker private $data = Hi; public

6、 function get() return $this-data; public function out() echo $this-data; $aa = new talker(); $d = $aa-get(); $aa-out(); $d = How; $aa-out(); $d = Are; $aa-out(); $d = You; $aa-out(); ? /the output is HiHowAreYou 4.对象的引用 代码如下:?php class a var $abc=ABC; $b=new a; $c=$b; echo $b-abc;/这里输出ABC echo $c-a

7、bc;/这里输出ABC $b-abc=DEF; echo $c-abc;/这里输出DEF ? 上代码是在PHP5中的运行效果 在PHP5中 对象的赋值是个引用的过程。上列中$b=new a; $c=$b; 其实等效于$b=new a; $c=$b; PHP5中默认就是通过引用来调用对象, 但有时你可能想建立一个对象的副本,并盼望原来的对象的转变不影响到副本 . 为了这样的目的,PHP5定义了一个特别的方法,称为_clone。 自 PHP 5 起,new 自动返回引用,因此在此用法 = 已经过时了并且会产生 E_STRICT 级别的消息。 在php4中,对象的赋值是个拷贝过程, 如:$b=new

8、 a,其中new a产生的是一个匿名的a对象实例,而此时的$b是对这个匿名对象的拷贝。同理$c=$b,也是对$b内容的一个拷贝。所以在php4中,为了节约内存空间,$b=new a 一般会改成引用的模式,即 $b= new a。 下面再来个 官方 供应的例子: 在php5中,你不需要额外添加什么东西就可到达“对象引用”的功能: 代码如下:?php class foo protected $name; function _construct($str) $this-name = $str; function _toString() return my name is . $this-name .

9、 and I live in . _CLASS_ . . . n; function setName($str) $this-name = $str; class MasterOne protected $foo; function _construct($f) $this-foo = $f; function _toString() return Master: . _CLASS_ . | foo: . $this-foo . n; function setFooName($str) $this-foo-setName( $str ); class MasterTwo protected $

10、foo; function _construct($f) $this-foo = $f; function _toString() return Master: . _CLASS_ . | foo: . $this-foo . n; function setFooName($str) $this-foo-setName( $str ); $bar = new foo(bar); print(n); print(Only Created $bar and printing $barn); print( $bar ); print(n); print(Now $baz is referenced

11、to $bar and printing $bar and $bazn); $baz = $bar; print( $bar ); print(n); print(Now Creating MasterOne and Two and passing $bar to both constructorsn); $m1 = new MasterOne( $bar ); $m2 = new MasterTwo( $bar ); print( $m1 ); print( $m2 ); print(n); print(Now changing value of $bar and printing $bar

12、 and $bazn); $bar-setName(baz); print( $bar ); print( $baz ); print(n); print(Now printing again MasterOne and Twon); print( $m1 ); print( $m2 ); print(n); print(Now changing MasterTwos foo name and printing again MasterOne and Twon); $m2-setFooName( MasterTwos Foo ); print( $m1 ); print( $m2 ); pri

13、nt(Also printing $bar and $bazn); print( $bar ); print( $baz ); ? 输出: 代码如下:Only Created $bar and printing $bar my name is bar and I live in foo. Now $baz is referenced to $bar and printing $bar and $baz my name is bar and I live in foo. Now Creating MasterOne and Two and passing $bar to both constructors Master: MasterOne | foo: my name is bar and I live in foo. Master: MasterTwo | foo: my name is bar and I live in foo. Now ch

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档 > 租房合同

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号