PHP对象的浅复制与深复制的实例详解
原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
原型模式是基于深复制和浅复制的,在Java里面有2种复制:
浅复制
将一个对象复制之后,生成一个新的对象,新对象的所有成员变量(基本类型或引用类型)都含有与原
有对象相同的值,如果原有对象的成员变量是基本数据类型,就会将这个变量的值拷贝一份到新对象
里面,如果原有对象的成员变量是引用数据类型,那么这个引用指向的对象不会新生成一份,而是,
在新对象里面的这个引用跟原有对象的引用指向的是同一个对象。
深复制
将一个对象复制之后,生成一个新的对象,新对象的基本数据类型变量含有与原有对象相同的值,如
果原有对象的成员变量是引用数据类型,在新对象里面,这些引用变量将指向被复制过的新对象,而
不再是指向原有的那些被引用的对象,深复制把要复制的对象所引用的对象都复制一遍。
比如:
有一个A对象,经过复制之后产生一个B对象,如果A里面有一个int型的变量i值为4,那么B对象里面
的inti的值也是4,A对这个int型变量的改变,不会影响B,如果A里面有一个成员变量c是引用类型
的,它指向了对象D,经过复制,B里面也会有一个c,这个c也指向D对象,A的c和B的c指向的是同一个
对象D,这就是浅复制。如果是深复制,A里面的c指向一个D对象,对于B里面的c会指向一个新的对象
,他们指向的不是同一个对象,这样,在原有对象里面对成员变量c指向的对象D做的任何改变,不会
影响新对象。
举个最简单的例子:
classA{
publicinti;
publicintj;
}
Aa=newA();
浅拷贝:
Aa1=a;
深拷贝:
Aa1=newA();
a1.i=a.i;
a1.j=a.j;
感觉如下:
浅拷贝只拷贝对象本身
深拷贝则拷贝对象中引用的对象,一直拷贝下去。
php如何抓取行业词库
php抓取行业词库的第一步是实现序列化,也就是按照顺序去抓取字节,PHP不支持永久对象,在OOP中永久对象是可以在多个应用的引用中保持状态和功能的对象,这意味着拥有将对象保存到一个文件或数据库中的能力,而且可以在以后装入对象。这就是所谓的序列化机制。PHP 拥有序列化方法,它可以通过对象进行调用,序列化方法可以返回对象的字符串表示。然而,序列化只保存了对象的成员数据而不包话方法。
第二步是构造函数,构造函数是类中的一个特殊函数,当使用 new 操作符创建一个类的实例时,构造函数将会自动调用。当函数与类同名时,这个函数将成为构造函数。如果一个类没有构造函数,则调用基类的构造函数。
第三步,是分析解构函数,PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
第四步是,遵守cookie机制进行运作,cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。
可以用 setcookie() 或 setrawcookie() 函数来设置 cookie。cookie 是 HTTP 标头的一部分,因此 setcookie() 函数必须在其它信息被输出到浏览器前调用,这和对 header() 函数的限制类似。可以使用输出缓冲函数来延迟脚本的输出,直到按需要设置好了所有的 cookie 或者其它 HTTP 标头。
第五步,制造比如simple dict之类的简单工具,进行词库的捉取,不用安装扩展,也不依赖 xcache memcache redis 之类的缓存。当然也可以更复杂,采用complex,附加更多组件和程式原理。

