很多站长朋友们都不太清楚phpclone变量,今天小编就来给大家整理phpclone变量,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 怎么在php中使用clone复制对象 2、 PHP对象克隆clone用法示例 3、 如何使用PHP5中的Clone函数 4、 php clone后是什么对象 5、 sub=clone $this->sub;怎么理解?有何作用?还有$s->sub->$value =10;是怎么理解的?' title='php类中$this->sub=clone $this->sub;怎么理解?有何作用?还有$s->sub->$value =10;是怎么理解的?'>php类中$this->sub=clone $this->sub;怎么理解?有何作用?还有$s->sub->$value =10;是怎么理解的? 6、 php中clone和new的区别 怎么在php中使用clone复制对象(1)调用Cbitmap类的LoadBitmap函数调入位图资源。
(2)调用CDC::CreatCompatibleDC函数创建一个内存设备环境,以便位图在内存中保留下来,并于指定设备环境兼容。
PHP对象克隆clone用法示例本文实例讲述了PHP对象克隆clone用法。分享给大家供大家参考,具体如下:
浅克隆:只是克隆对象中的非对象非资源数据,即对象中属性存储的是对象类型,则会出现克隆不完全
<?php
class
B{
public
$val
=
10;
}
class
A{
public
$val
=
20;
public
$b;
public
function
__construct(){
$this->b
=
new
B();
}
}
$obj_a
=
new
A();
$obj_b
=
clone
$obj_a;
$obj_a->val
=
30;
$obj_a->b->val
=
40;
var_dump($obj_a);
echo
'<br>';
var_dump($obj_b);
运行结果如下:
object(A)[1]
public
'val'
=>
int
30
public
'b'
=>
object(B)[2]
public
'val'
=>
int
40
object(A)[3]
public
'val'
=>
int
20
public
'b'
=>
object(B)[2]
public
'val'
=>
int
40
深克隆:一个对象的所有属性数据都彻底的复制,需要使用魔术方法__clone(),并在里面实现深度克隆
<?php
class
B{
public
$val
=
10;
}
class
A{
public
$val
=
20;
public
$b;
public
function
__construct(){
$this->b
=
new
B();
}
public
function
__clone(){
$this->b
=
clone
$this->b;
}
}
$obj_a
=
new
A();
$obj_b
=
clone
$obj_a;
$obj_a->val
=
30;
$obj_a->b->val
=
40;
var_dump($obj_a);
echo
'<br>';
var_dump($obj_b);
运行结果如下:
object(A)[1]
public
'val'
=>
int
30
public
'b'
=>
object(B)[2]
public
'val'
=>
int
40
object(A)[3]
public
'val'
=>
int
20
public
'b'
=>
object(B)[4]
public
'val'
=>
int
10
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
如何使用PHP5中的Clone函数这还不仅仅是因为它对于PHP4高度的向后兼容性。
当然,PHP5数据包具备强大的对象模型和一整套新型函数与库,更不用说它其中便携式异常机制,这一机制赋予了它有效处理错误和异常事件的能力。
通过php在服务器上写入文件
当然,当我们使用“函数”这一词时,我们所谈论的并不仅是通常所指的执行指定任务(如从文件中读取数据或为所供变量应用过滤器)的那一概念。我们所指的还包括一些神奇功能,即那些不具备默认的确定执行任务且可以被PHP引擎自动调用以响应某些特定事件的函数。
开发对象指向型PHP应用程序时,_set(),_get()和_call()方法就种神奇函数的典型代表,但是还有其他一些神奇函数值得开发员深入分析。在本文里,我们将集中讨论“_clone()”方法,顾名思义,使用“clone”PHP关键词时可以从幕后调用这一方法。
复制对象的时候从幕后触发函数
就像我们在之前提到的,使用clone关键词的时候,_clone()函数会被自动援引。为了简洁起见,现在我们只谈论用来创建指定对象单独副本的clone关键词,而不谈及创建引用。
php clone后是什么对象在php5中,对象的传递方式默认为引用传递,如果我们想要在内存中生成两个一样的对象或者创建一个对象的副本,这时可以使用“克隆”。
通过 clone 克隆一个对象
对象的复制是通过关键字 clone 来实现的。用 clone 克隆出来的对象与原对象没有任何关系,它是把原来的对象从当前的位置重新复制了一份,也就是相当于在内存中新开辟了一块空间。通过关键字 clone 可以克隆一个对象,语法格式如下:
$克隆对象名称=clone $原对象名称;
__clone()方法
对象的__clone()方法不能够直接被调用,只有当通过关键字 clone 克隆一个对象时才可以使用该对象调用__clone()方法。当创建对象的一个副本时,php5将会检查__clone()方法是否存在。如果不存在,那 么它就会调用默认的__clone()方法,复制对象的所有属性。如果__clone方法已经定义过,那么__clone()方法就会负责设置新对象的属 性。所以在__clone()方法中,只需要覆盖那些需要更改的属性就可以了。例子如下:
sub=clone $this->sub;怎么理解?有何作用?还有$s->sub->$value =10;是怎么理解的?'>php类中$this->sub=clone $this->sub;怎么理解?有何作用?还有$s->sub->$value =10;是怎么理解的?<?php
//定义类Session
class Session
{
public $age = 20;
public $sub = null;
public function __clone()//此处注意,魔术方法要用两个下划短线才会生效
{
$this->sub = clone $this->sub;// 强制复制一份this->sub
}
}
//定义Seesion2类
class Session2
{
public $value = 5;
}
//建立Session类的实例
$s = new Session;
echo "观察最初的s对象:";
print_r($s);
echo "<br/>\n";
//自动调用__clone函数,其效果是在$s强制复制了一份Session2对象
//也就是说,sub为Session2对象,有一个$value成员,并且其值初始化为5
$s->sub = new Session2;
echo "观察调用clone的s对象:";
print_r($s);
echo "<br/>\n";
//-------注意:php变量名称区分大小写$s2 = clone $S;
//$s2为$s对象的复制品
$s2 = clone $s;
echo "观察clone的s2对象:";
print_r($s2);
echo "<br/>\n";
//-------注意:用对象访问->操作符时,属性前不要加$
//-------$s->sub->$value = 10;
//-------echo $s2->sub->$value;
//修改sub的value值
$s->sub->value = 10;
//显示$s2对象的值
//$s2是$s的克隆,对$s对象修改value值的操作并不会影响$s2
//因此,显示结果为 5
echo $s2->sub->value . "<br/>";
//$sc显示结果为 10
echo $s->sub->value;
?>
============================================ 运行结果:
观察最初的s对象:Session Object ( [age] => 20 [sub] => )
观察调用clone的s对象:Session Object ( [age] => 20 [sub] => Session2 Object ( [value] => 5 ) )
观察clone的s2对象:Session Object ( [age] => 20 [sub] => Session2 Object ( [value] => 5 ) )
$s2->sub->value 值为:5
$s->sub->value 值为:10
============================================
关于clone()一些细节:
对象复制可以通过clone关键字来完成(如果可能,这将调用对象的__clone()方法)。对象中的 __clone()方法不能被直接调用。
$this->sub = clone $this->sub;
当对象被复制后,PHP5会对对象的所有属性执行一个浅复制(shallow copy)。所有的引用属性 仍然会是一个指向原来的变量的引用。
void __clone ( void )
当复制完成时, 如果定义了__clone()方法, 则新创建的对象(复制生成的对象)中的__clone()方法会被调用, 可用于修改属性的值(如果有必要的话)。
php中clone和new的区别比如现在有一个类 class Person{ function demo (){ return "ok!"; } } $one = new Person(); $two = new Person(); ---------------------------- $one = new Person(); $two = clone $one;
第一种是$one和$two没有关系,第二种两者只是名字不同,一个改变另一个也会改变
1 <?php
2 class Account {
3 public $balance;
4
5 public function __construct($balance) {
6 $this->balance = $balance;
7 }
8 }
9
10 class Person {
11 private $id;
12 private $name;
13 private $age;
14 public $account;
15
16 public function __construct($name, $age, Account $account) {
17 $this->name = $name;
18 $this->age = $age;
19 $this->account = $account;
20 }
21
22 public function setId($id) {
23 $this->id = $id;
24 }
25
26 public function __clone() { #复制方法,可在里面定义再clone是进行的操作
27 $this->id = 0;
28 $this->account = clone $this->account; #不加这一句,account在clone是会只被复制引用,其中一个account的balance被修改另一个也同样会被修改
29 }
30 }
31
32 $person = new Person("peter", 15, new Account(1000));
33 $person->setId(1);
34 $person2 = clone $person;
35
36 $person2->account->balance = 250;
37
38 var_dump($person, $person2);
关于phpclone变量的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于phpclone变量 php变量底层实现的详细内容...