基本概念
基本概念需要注意的比较散,一些基本的东西吧。
注意以下成员定义无效:总的来说就是i不接受任何表达式的赋值,只能直接是字符串和数组。
1 <?php
2 class SimpleClass
3 public $var1='hello'.'word';
4 public $var2=<<<EOT hello world
5 EOD;
6 public $var3=1+2;
7 public $var4=self::mystaticmenthod();
8 public $var5=$myvar;
9 ?>
还有在实力化过程中其实是拷贝。
<?php
$foo=new MyClass(); //拷贝1
$bar=new MyClass(); //拷贝2
?>
说到 PHP 的对象,总有一句话:“ PHP 当中对象是按引用传递的,即每个包含对象的变量都持有对象的引用(reference),而不是整个对象的拷贝”。然而这里的“引用”并不是 C++ 程序员所习惯的“引用”——严格来说, PHP 的“对象的引用”其实是对象的标识符的一个拷贝。
C++ 程序员所理解的引用只是对象的另一个名字,本身不占据任何存储空间(指针还储存着指向该对象的地址)。故而 C++ 的引用必须在声明时初始化,且不能再被修改。
而 PHP 的对象的引用则更接近指针,它储存着该对象的一个“标识符”(类似地址),传递对象时是在拷贝这个标识符。故而你可以修改一个引用使其指向另一个对象(其实是修改了这个引用所储存的标识符)。
如果我们使用 PHP 的引用操作符 & 来显式地引用一个“对象”(如前文所述,实际上引用的是对象的标识符),那么我们将会得到一个“对象的引用”的引用,修改原引用,那么这个“引用的引用”也会随之更改。
给一段代码,很能说明问题:
1 <?php
2 class foo {
3 public $bar = 1;
4 }
5
6 $a = new foo; //$a其实也是一个引用
7 $b = $a; //拷贝引用 ($a)=($b)={id1}
8
9 $a->bar = 2;
10 echo "b->bar = $b->bar\n";
11
12 $b->bar = 3;
13 echo "a->bar = $a->bar\n";
14 //修改了b,但实际上是修改了a和b所引用的同一个对象
15 //并不会引发 Copy On Write 创建一个新对象b
16
17 $a = new foo; //$a被修改为一个新的引用,$b没有改变
18 //($a)={id2} ($b)={id1}
19 $a->bar = 4;
20 echo "b->bar = $b->bar\n";
21
22 $b = &$a; //显式地使用引用,b成为“对象的引用”的引用
23 $a = new foo; //($a)={id3} ($b)=&($a)=&{id3}
24 $a->bar = 5;
25 echo "b->bar = $b->bar\n"
26 ?>
代码输出:<br></br>b->bar = 2<br></br>a->bar = 3<br></br>b->bar = 3<br></br>b->bar = 5
原文链接: https://www.cnblogs.com/saw2012/archive/2013/02/01/2889239.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/77419
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!