【笔记】PHP的面向对象

前言

PHP的面向对象学习笔记

定义类

1
2
3
4
5
6
7
class 类名 {
public $字段名;

public function 方法名() {
...
}
}

创建对象

无参

1
$对象名 = new 类名();

有参

1
$对象名 = new 类名('属性名'->属性值);

获取对象属性值

1
$对象名->属性名;

修改对象属性值

1
$对象名->属性名 = 属性值;

调用方法

1
$对象名->方法名();

权限修饰符

  • public:修饰共有属性或公有方法
  • protected:修饰受保护属性或受保护方法
  • private:修饰私有属性或私有方法

魔术方法

  • 函数中内置的方法

__construct()

  • 构造函数在对象创建时自动触发
  • 必须是通过new关键字创建对象时触发,如果是通过反序列化则不会触发
1
2
3
4
5
6
7
class 类名 {
public function __construct() {
...
}
}

$对象名 = new 类名();

__destruct()

  • 析构函数在对象销毁时自动触发
    • 通过unset()手动销毁对象时会自动触发
    • 程序执行完毕时也会自动触发
  • 无论对象是通过new关键字创建的还是通过反序列化获取的,只要是被销毁,都会触发
1
2
3
4
5
6
7
8
class 类名 {
public function __destruct() {
...
}
}

$对象名 = new 类名();
unset($对象名);

__toString()

  • 在将对象作为字符串时会自动触发
    • echo对象时会自动触发
1
2
3
4
5
6
7
8
class 类名 {
public function __toString() {
...
}
}

$对象名 = new 类名();
echo $对象名;

__call()

  • 在对象上下文中调用不可访问的方法时自动触发
1
2
3
4
5
6
7
8
class 类名 {
public function __call() {
...
}
}

$对象名 = new 类名();
$对象名->不存在的方法();

__get()

  • 在获取对象上不存在的属性值时自动触发
1
2
3
4
5
6
7
8
class 类名 {
public function __get() {
...
}
}

$对象名 = new 类名();
$变量名 = $对象名->$不存在的属性;

__set()

  • 在修改对象上不存在的属性值时自动触发
1
2
3
4
5
6
7
8
class 类名 {
public function __set() {
...
}
}

$对象名 = new 类名();
$对象名->$不存在的属性 = 值;

__sleep()

  • 通过serialize()序列化前会自动触发
1
2
3
4
5
6
7
8
class 类名 {
public function __sleep() {
...
}
}

$对象名 = new 类名();
$变量名 = serialize($对象名);

__wakeup()

  • 通过unserialize()反序列化前会自动触发
1
2
3
4
5
6
7
8
9
class 类名 {
public function __wakeup() {
...
}
}

$对象名 = new 类名();
$变量名 = serialize($对象名);
unserialize($变量名);

__isset()

  • 通过isset()empty()判断私有属性是否存在时自动触发
1
2
3
4
5
6
7
8
9
class 类名 {
private $私有属性;
public function __isset() {
...
}
}

$对象名 = new 类名();
isset($对象名->$私有属性);

__unset()

  • 通过unset()销毁对象上的私有属性时自动触发
1
2
3
4
5
6
7
8
9
class 类名 {
private $私有属性;
public function __unset() {
...
}
}

$对象名 = new 类名();
unset($对象名->$私有属性);

__invoke()

  • 当对象被当作函数调用时自动触发
1
2
3
4
5
6
7
8
class 类名 {
public function __invoke(形参列表) {
...
}
}

$对象名 = new 类名();
$对象名(实参列表);

完成

参考文献

哔哩哔哩——千锋教育网络安全学院
哔哩哔哩——xiaodisec