class Person{ public $name; public function money(){ echo '20000'; }}$p1 = new Person;$p2 = new Person;var_dump($p1, $p2);?>
输出结果:object(Person)#1 (1) { ["name"]=> NULL } object(Person)#2 (1) { ["name"]=> NULL }
天生了两个不同的工具
2、把工具赋值给其余一个变量, 采取的是"引用传值"办法, 是同一个工具(间接)
<?phpclass Person{public $name;public function money(){echo '20000';}}$p1 = new Person;$p2 = $p1;var_dump($p1, $p2);?>
object(Person)#1 (1) { ["name"]=> NULL } object(Person)#1 (1) { ["name"]=> NULL }
两个工具的编号相同
3、克隆工具
把一个工具进行复制, 形成一个新的工具
关键字 clone
语法: clone 工具变量
<?phpclass Person{ public $name; public function money(){ echo '20000'; }}$p1 = new Person;$p2 = clone $p1;var_dump($p1, $p2);?>
object(Person)#1 (1) { ["name"]=> NULL } object(Person)#2 (1) { ["name"]=> NULL }
两个工具的编号不同
4、工具的比较
要判断是否是同一个工具, 必须类成员同等, 而且编号必须相同
<?phpclass Person{ public $name; public function money(){ echo '20000'; }}$p1 = new Person;$p2 = clone $p1;var_dump($p1 == $p2); //true 成员属性是一样的var_dump($p1 === $p2); //false 编号不一致?>
5 工具的传值办法细节磋商
<?phpheader("Content-type: text/html; charset=utf-8");class Person{ var $age = 18;}$p1 = new Person();$p2 = $p1; //复制工具的标识符$p2->age++;var_dump($p1); echo "<br>"; //object(Person)#1 (1) { ["age"]=> int(19) }var_dump($p2); echo "<br>"; //object(Person)#1 (1) { ["age"]=> int(19) }echo "<br/>\$p1->age: ".$p1->age; //$p1->age: 19echo "<br/>\$p2->age: ".$p2->age; //$p2->age: 19$p3 = new Person();$p4 = &$p3; //引用传址$p4->age++;echo "<br>\$p3->age: ".$p3->age; //$p3->age: 19echo "<br>\$p4->age: ".$p4->age; //$p4->age: 19echo "<br>";$p2 = 10;$p4 = 10;var_dump($p1); echo "<br>"; //object(Person)#1 (1) { ["age"]=> int(19) }var_dump($p2); echo "<br>"; //int(10)var_dump($p3); echo "<br>"; //int(10)var_dump($p4); echo "<br>"; //int(10)?>
工具变量直接指向(操作)的是工具的编号(标示符)。利用工具变量, 实在是在利用工具的标示符(但并不能显示出来),
该标示符是内置指向工具数据本身的。则作为变量的默认传值办法, 工具变量之间的传值默认也是"值通报";
对付按值通报:$p2 = $p1;
其结果是:复制了$p1直接指向的工具编号数据, 并赋值给了$p2
$p1 object(Person)#1 (1) { ["age"]=> int(19) }
$p2 object(Person)#1 (1) { ["age"]=> int(19) }
对付引用传址:$p4 = &$p3;
变量$p4直接复制变量$p3, 也一样有着共同的工具编号数据;
$p3 object(Person)#1 (1) { ["age"]=> int(19) }
$p4 object(Person)#1 (1) { ["age"]=> int(19) }
对付赋值操作:$p2 = 10; $p4 = 10;
此时的数据10只是一个普通数据, 不是标识符就不能指向工具了;