ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 暂且略过 trait 反射 自动加载 oauth 授权原理 单点登陆原理 设计模式 **STATIC(静态)** * 静态调用的结果,会一直存储在内存当中 * 静态属性或方法直接调用 , 不需要实例化对象 * 一个静态方法调用其它静态方法时,使用`self::` * 静态方法不能调用非静态属性 。不能使用`self::` 或 `$this->` 调用非静态属性 * 当有非静态方法被`self::` 调用时,系统会自动将这个方法转换为静态方法 * 使用`unset()` 一个静态变量时,再次调用静态变量将被复原为上次被销毁之前的值 * 注销一个静态变量,重新静态定义该变量为`null` **匿名和闭包** * 匿名函数(Anonymous functions),也叫闭包函数(closures) * 允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值 * 使用`use`连接闭包和外界变量 ## 五大基本原则 ### 单一职责原则SRP(Single Responsibility Principle) 是指一个类的功能要单一,不能包罗万象。如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌的,但效率却高不起来。 ### 开放封闭原则OCP(Open-Close Principle) 一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能, 那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。 ### 替换原则(the Liskov Substitution Principle LSP) 子类应当可以替换父类并出现在父类能够出现的任何地方。比如:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工, 也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。 ### 依赖原则(the Dependency Inversion Principle DIP) 具体依赖抽象,上层依赖下层。 假设B是较A低的模块,但B需要使用到A的功能,这个时候,B不应当直接使用A中的具体类: 而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可能造成循环依赖。一个常见的问题就是编译A模块时需要直接包含到B模块的cpp文件,而编译B时同样要直接包含到A的cpp文件。 ### 接口分离原则(the Interface Segregation Principle ISP) 模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来