// 当一个属性不存在就读取__set
// 存在就__get
// 当方法不存在调用 __call
// 当静态方法不存在调用__callStatic
// toString 当输出对象 时自动转换字符串
// __invoke 当把对象当成函数输出是执行
工厂模式 减少new的操作 更好的维护
// 单例模式整个类里只有一个可以访问的实例
策略模式:将一种特定的行为和算法封装成类 以适应某种特定上下文环境
// 观察者模式 当一个对象发送改变后执行通知并执行逻辑 主要就是减少代码耦合 非侵入式的通知和更新机制
// 原型模式 和工场类似 原型是先建好一个对象 然后通过clone原型来创建新对象这样就免去了重复的初始化操作
// 面向对象原则
// 单一原则 一个类做好一个事
// 开放封闭 一个类应该是可扩展的 而不可修改的
// 依赖倒置 一个类不应该强依赖另一个类没给类对于另外一个类都是可替换的
// 配置化 进肯能的使用配置 而不是写在代码里
// 面向接口编程 只需要关心接口 不需要关心实现