命名空间
PHP 命名空间可以解决以下两类问题:用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
自动加载
spl_autoload_register函数实现自动加载功能,支持匿名函数,函数名字符串,数组等传参方式
PSR-0规范
- 命名空间必须与绝对路径一致
- 类名首字母必须大写
- 除入口文件外,其他
.php
必须只有一个类
PHP的SPL扩展
- 栈
- 队列
- 堆
- 数组
PHP的链式操作
核心思想return $this
PHP的魔术方法
- __get与__set
- __call与__callStatic
- __toString
- __invoke
单例模式
目的:在应用程序调用的时候,只能获得一个对象实例
优点:提供了对唯一实例的受控访问;由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能
缺点:单例类的职责过重,里面的代码可能会过于复杂,在一定程度上违背了单一职责原则;如果实例化的对象长时间不被利用,会被系统认为是垃圾而被回收,这将导致对象状态的丢失
适用场景:
单例模式只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被公用的场合适合使用,如多个模块使用同一个数据源连接对象等等。如:
1.需要频繁实例化然后销毁的对象。
2.创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
3.有状态的工具类对象。
4.频繁访问数据库或文件的对象。
例子:数据库连接,日志 (多种不同用途的日志也可能会成为多例模式),网站的计数器,在应用中锁定文件 (系统中只存在一个 …)
class Single {
//静态属性存放唯一实例对象
private static $instance = null;
//私有化构造函数,使外界不能通过 new 关键字实例化该类
private function __construct(){}
//私有化__clone方法,这样不能拷贝一个对象
private function __clone(){}
//静态方法,获取该类的唯一对象
public static function getInstance()
{
if( ! ( self::$instance instanceof self ) ){
self::$instance = new self();
}
return self::$instance;
}
}
$a = Single::getInstance();
$b = Single::getInstance();
$c = Single::getInstance();
$d = Single::getInstance();
var_dump($a,$b,$c,$d);