类型约束有int,string,array,float,bool等。但类也可以作为类型约束的类型之一,如图test(A $a)指的是$a必须是类A的对象,否则会报错。
浅拷贝:对象赋值$b=$a,2个对象指向同一块内存地址,值发生改变会互相影响。浅拷贝比较省内存。
深拷贝:用clone关键字,会产生一块新的内存存储对象。clone后相当于有两个值相同的不同的对象。若clone的原对象里有对象属性如$a->obj,由于对象复制默认是浅拷贝,则要用到__clone魔术方法定义对象属性为深拷贝。这样$a->obj->sex才不受$b->obj->sex影响。
对象复制是浅拷贝,会改变对象值,前面加clone,这不会改变原来值。
对象之间的赋值是浅拷贝(其中一个对象的值会随着另外一个对象的值改变),变量之间赋值是深拷贝(其中一个变量的值的改变不会影响另外一个变量的值);
要把对象之间的赋值变成深拷贝使用"clone"关键字;
浅拷贝比较省内存,深拷贝
比较耗内存;
PHP的类型提示
深拷贝:使用 clone 可以使赋值转为深拷贝
浅拷贝: 对象之间的赋值是浅拷贝
默认浅拷贝(是地址)
深拷贝(是值)不会相互影响$b= clone $a;
php的类型约束,
在php中对象的赋值是浅拷贝 地址传递 同一个内存 同一个值 改变其中任意一个值 另外一个也会跟着改变
例如 $a=new A(); $b=$a;
若要使用深拷贝 即只把对象的值拷贝 应该如下
$b=clone $a;
由于浅拷贝比较省内存 所以php默认浅拷贝