对象,就是处理一些系列问题的方法的封装。
面向过程的话,就是你走路迈左脚右脚,每迈出一步都需要你指示,面向对象的话你只需要传达一次走路命令,对象内部自动协调迈左脚右脚。
从代码架构方面,对象就是基础,每个对象就像每个积木一样,相互配合,最终搭建出完整的程序。
一个类
其中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 | class ExampleController extends BaseController { |
像变量和方法可以加public、private等访问控制修饰符一样,类也可以加修饰符,带来不同的特性。
比如:interface,则该类作为接口类,只定义必须包含的方法,没有具体实现。
1 | interface ExampleInterface |
一般repository设计模式会用到,其他特定场景也会用到。
然后还有一个自动加载,这里也记录一下,当new的类找不到时,自动调用spl_autoload_register方法,可以在该方法内处理依赖的引入。
1 | spl_autoload_register(function ($class_name) { |
有点乱,以后再整理==