好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

phpclone变量 php变量底层实现

很多站长朋友们都不太清楚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变量底层实现的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did197758
更新时间:2023-04-26   阅读:14次

上一篇: php新增商户代码 php添加

下一篇:php调试log PHP调试环境

相关资讯

最新资料更新

  • 1.php登录保护机制 php保持登录状态
  • 2.form居中显示php form居中显示
  • 3.php受不受欢迎 php无法接收post
  • 4.包含php-fpm-t的词条
  • 5.零基础php模板 php0基础教程
  • 6.接口的继承php 接口的继承和实现
  • 7.php短信被刷 php防止短信被刷
  • 8.jq调用php数据 php100 jquery教程
  • 9.免费的php解密 php des解密
  • 10.php正则到底 php中的正则表达式
  • 11.php接收tcp数据 php tcp udp
  • 12.php输出jq代码 php输出hello
  • 13.php下载liunx php下载器
  • 14.php移动gps定位 functionsphp位置
  • 15.PHP没有前景吗 php现在怎么样
  • 16.apexphp辅助 apex wr辅助
  • 17.php调用裁剪插件 phpcrawl
  • 18.phpwhere循环 php中的循环
  • 19.php每个小时执行 php定时执行每天执行一次
  • 20.商品展示模块php 商品展示模块的设计要点

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]