php教程,class类如何感知到对象克隆事件?如何阻止克隆?
发布于 作者:苏南大叔 来源:程序如此灵动~

本文代码是基于php
的,主角是class
类中默认的__clone()
方法。所以,本文的一切故事都是通过这个__clone()
方法所展开的。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验总结。本文测试环境:win10
,nginx@1.15.11
,php@8.2.10-nts
。
clone操作与等号操作
不论是哪种编程语言,当“等号”和“高级类型”碰撞的时候,a=b
都复制的是内存地址,并不是一个新的对象。修改原来的变量的话,后来的变量也会发生变化,php
也是这样的。
测试代码:
所以,在php
中,也是使用clone
关键字操作,才能获得一个完全一样但是并非本体的复制品。
感知clone
操作
实际上就是重写类中默认的__clone()
方法。测试代码如下:
输出:
很显然,=
等号操作并不能被称之为克隆,也并不会触发__clone()
方法。
禁止克隆操作
禁止某个类被克隆的方案,其实很简单:就是把__clone()
方法设置为private
私有的。

这样,就不能在外部使用clone
操作了,会得到的错误提示,类似如下:
相关文章
- https://newsn.net/say/php-static-var.html
- https://newsn.net/say/php-static-method.html
- https://newsn.net/say/php-debug-func.html
- https://newsn.net/say/php-reflect-class.html
结束语
更多苏南大叔总结的php
经验文章,请点击:


