- PHP 类与对象类:一组共享相同结构和和行为的对象集合
对象:类的实例 使用new的关键字
Php magic函数
在PHP中,魔术方法(Magic Methods)是一组特殊的函数,它们以双下划线(__)作为前缀来命名。这些函数在特定的情况下会自动调用,以执行一些特定的操作。以下是一些常用的魔术方法:
实践:
自动化的操作:魔术方法在特定的情况下会被自动调用,无需手动调用,从而减少冗余的代码。例如,__construct() 方法会在对象创建时自动调用,__destruct() 方法会在对象销毁时自动调用,这样可以方便地进行初始化和资源释放操作。
动态属性和方法控制:通过 __get()、__set()、__isset()、__unset() 方法,可以动态地获取、设置、判断和删除对象的属性。通过 __call() 和 __callStatic() 方法,可以动态地捕获和处理未定义的方法调用。这样可以实现属性和方法的动态控制,增加了代码的灵活性。
自定义对象输出:通过 __toString() 方法,可以自定义对象被转换为字符串时的输出格式。这样可以对对象的展示形式进行定制,便于调试和日志记录。
对象的克隆控制:通过 __clone() 方法,可以对对象的克隆行为进行控制。
- PHP 的序列化和反序列化
Php 对象存活时是在内存里面,我们可以访问对象的属性和方法,一旦代码运行完毕,对象就消亡了,对象访问不到了,那我们能不能将对象以某种形式存储起来,之后继续使用或者远程传递到别的地方去使用这时,序列化就出现了。
序列化是将数据结构或对象转换为可存储(一般是字符串)或传输的形式,使其能够在不同的系统或平台上进行存储、传输和恢复的过程。
序列化演示
我们定义一个class 有公有属性,私有属性还有方法:
序列化的结果
第1个 为int类型,所以标号为i, 值为32,序列化的结果为i:32;为5个字符,长度为string(5)
第2个 为string类型,所以标号为s, 字符长度为4 “wuya”,序列化的结果为s:4:”wuya”;为11个字符,长度为string(11)
第3个 为布尔类型,所以标号为b, 值为1,序列化的结果为b:1;,为4个字符,长度为string(4)
第4个 为null类型,所以标号为N, 序列化的结果为N;为2个字符,长度为string(2)
第5个 为数组类型,所以标号为a, array里面有2个,所以值为a:2,两个值里面有键值,序列化为int与字符串类型,加起来总长度为34个字符,长度为string(34)
第6个 为对象类型,所以标号为object, 值为10(对象的名字),里面有两个属性data和pass
data 的值是字符串,他们序列化后都是string,但是pass是私有属性,序列化是会调用本身的class,所以序列化的是类的名字+私有属性的名字SerialTypepass,而不是pass单独的名字,他的值为true是第2个的布尔类型,所以序列化为b:1.
除了有php的序列化,还有其他序列化的格式
PHP反序列化演示
反序列化注意