【笔记】PHP的面向对象

前言

PHP的面向对象学习笔记

定义类

1
2
3
4
5
6
7
8
9
10
11
class 类名 {
public $属性名;

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

public static function 静态方法名() {
...
}
}

通过类创建对象

无参

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

有参

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

修改对象属性值

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

获取对象属性值

1
$变量名 = $对象名->属性名;

调用方法

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

权限修饰符

public:缺省值,共有权限
protected:受保护的权限
private:私有权限

1
2
3
4
5
6
7
8
9
10
11
12
13
class 类名 {
public $属性名;
protected $属性名;
private $属性名;

function 方法名() {}

public function 方法名() {}

protected function 方法名() {}

private function 方法名() {}
}

魔法方法

初始化方法

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

$对象名 = new 类名();

销毁方法

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

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

转换为字符串方法

  • 将对象转换为字符串时会自动触发
    • 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 类名();
$对象名->不存在的方法名();

callStatic方法

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

$对象名 = new 类名();
$对象名::不存在的静态方法名();

get方法

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

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

set方法

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

$对象名 = new 类名();
$对象名->__set(实参);

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