0%

PHP面向对象整理

对象,就是处理一些系列问题的方法的封装。
面向过程的话,就是你走路迈左脚右脚,每迈出一步都需要你指示,面向对象的话你只需要传达一次走路命令,对象内部自动协调迈左脚右脚。
从代码架构方面,对象就是基础,每个对象就像每个积木一样,相互配合,最终搭建出完整的程序。

一个类

其中public、private、protected是访问控制关键字,public可以在类外部访问,private只能在类内部访问,protected可以在子类或父类中访问。

其中构造方法一般访问控制给public,如果给其他权限比如private,那么在外部就new不了了,但是类内可以操作的,所以有一种模式叫单例模式,就是类内有一个静态方法和一个私有变量,私有变量负责存储类生成的对象实例,静态方法负责返回唯一对象实例。

这种构造方法统一归类为魔术方法,其他魔术方法还有:__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() ,具体见:https://www.php.net/manual/zh/language.oop5.magic.php

可以用extends关键字继承一个父类,由于只能继承一个父类,所以又有了trait类来做为补充,trait就类似通用工具类的角色。

用static关键字声明静态方法或变量,外部调用的时候不必new对象实例,直接用类即可调用,如 ExampleController::$public_static_nn;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class ExampleController extends BaseController {
public $public_type;
private $private_type;
protected $protected_type;

public static $public_static_nn = 'NN';

const VERSION = '20200923'; // 常量,外部以静态方式调用

public function __construct()
{

}

public function __clone()
{
// 实例被克隆
}

public function show()
{
return 'show function';
}

private function privateShow()
{
return 'private show function';
}
}

像变量和方法可以加public、private等访问控制修饰符一样,类也可以加修饰符,带来不同的特性。

比如:interface,则该类作为接口类,只定义必须包含的方法,没有具体实现。

1
2
3
4
5
6
7
8
9
10
interface ExampleInterface
{
public function push($data);
public function pop($data);
}
其他类可以实现该接口,也可以实现多个接口类。
class Example implements ExampleInterface
{

}

一般repository设计模式会用到,其他特定场景也会用到。

然后还有一个自动加载,这里也记录一下,当new的类找不到时,自动调用spl_autoload_register方法,可以在该方法内处理依赖的引入。

1
2
3
4
5
spl_autoload_register(function ($class_name) {
require_once $class_name . '.php';
});
$obj = new MyClass1();
$obj2 = new MyClass2();

有点乱,以后再整理==

欢迎关注我的其它发布渠道