private、protected、public、final 区别
public:权限是最大的,可以内部调用,实例调用等。
protected: 受保护类型,用于本类和继承此类的子类调用。
private: 私有类型,只有在本类中使用。
abstract:修饰抽象方法,没有方法体,由继承该类的子类来实现。 entends
interface 定义接口 使用 implements
final:PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。(因此final和abstract不能同时出现)
trait 是什么东西
Trait为不支持多继承的php实现了多继承,使用时不是用extends继承,而是在类内部用 use 类名 表示。
trait ezcReflectionReturnInfo {function getReturnType() { /*1*/ }function getReturnDescription() { /*2*/ }}class ezcReflectionMethod extends ReflectionMethod {use ezcReflectionReturnInfo;/* ... */}class ezcReflectionFunction extends ReflectionFunction {use ezcReflectionReturnInfo;/* ... */}
继承 单继承
public 、protected 、private都可继承 构造函数
备注 private 可继承,但不可调用 ,protected 在方法体内调用 parent:: 调用父类方法
如果构造函数不重写则调用父类
封装
多态
子类继承父类,属性方法进行拓展,但不能更改父类 (里氏替换原则)
SRP 单一责任原则
OCP 开放封闭原则
LSP 里氏替换原则
ISP 接口隔离原则
DIP 依赖倒置原则
什么是依赖注入
依赖注入是控制反转的一种实现,实现代码解耦,便于单元测试。因为它并不需要了解自身所依赖的类,而只需要知道所依赖的类实现了自身所需要的方法就可以了。
控制反转 是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection, DI), 还有一种叫”依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
反射
设计模式
单例模式
/*** 单例模式* 保证一个类仅有一个实例;单例类必须自己创建自己的唯一实例;* 单例类的构造函数定义为 private 私有方法;* 单例类必须自行向整个系统提供这个实例*/class Singleton{private static $instance;//私有构造方法,禁止使用new创建对象private function __construct(){}//将克隆方法设为私有,禁止克隆对象private function __clone(){}//实例化化对象public function getInstance(){if ( !self::$instance instanceof self){self::$instance = new self;}//两种判断//if (!isset(self::$instance)) {//判断是否实例化//self::$instance = new self;//}return self::$instance;}public function test(){return "这是单例模式";}}$Singleton = Singleton::getInstance();$Singleton->test(); //这是单例模式$test = new Singleton(); //报错 Fatal error: Uncaught Error: Call to private Test::__construct() from invalid context in
