class Car {
private function __construct() {
echo 'object create';
}
private static $_object = null;
public static function getInstance() {
if (empty(self::$_object)) {
self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象
}
return self::$_object;
}
}
//$car = new Car(); //这里不允许直接实例化对象
$car = Car::getInstance(); //通过静态方法来获得一个实例
class Car {//这是一个CAR类
private function __construct() {//这是类的构造方法,私有,决定了外部不能直接实例化CAR类
echo 'object create';
}
//类既然造了,肯定要用,咋办捏
private static $_object = null;//先定义一个私有静态变量,内部才能访问,初始值为NULL,啥都没有
public static function getInstance() {//方法为公共静态的,外部可以直接用类名::方法名访问
if (empty(self::$_object)) {//先判断变量是不是存着东西了(程序里曾实例化了保存过),没东西才执行if里头的,如果有了,表示已经实例化过这个类,不用再实例化了,意义在于俗称单例模式,保证整个程序中只存在一个该类的实例化对象
self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象
}
return self::$_object;//返回该静态变量,这样通过该方法就能得到实例化后的类。如果没实例化过,返回的就是新得到的实例。如果以前实例过,返回的就是以前已经曾经实例化好的。意义前头已说明。
}
}
//$car = new Car(); //这里不允许直接实例化对象
$car = Car::getInstance(); //通过静态方法来获得一个实例
关键点:类中的静态属性作用类似于全局,深入理解可详搜索下堆栈区存放,不理解也不影响,只需知道它不同于一般函数变量使用后就被释放,所以方法中判断它是否empty的意义就在于此,实现单例功能。
常用于框架底层一些服务型的类,只需实例一次,或只能被实例一次的情况。
哪位大神能不怕麻烦,给每一句都注释一下。
public static function getInstance() { //声明一个公有的静态方法 这个方法的名字牛B,也是唬人的
if (empty(self::$_object)) { //判断类本身里面(self::,静态不用$this->)刚才的那个$_object是(否)为空。如果为真-----》执行下面的方法
self::$_object = new Car(); // 实例化,也就是创建对象?内部方法可以调用私有方法,因此这里可以创建对象
}
return self::$_object; //如果已经存在,就返回。。。这里不懂了
}
}
private static $_object = null; 声明一个私有的静态变量?这里$_object 命名是唬人的吗?用下划线给小白冲击太大了
private function __construct() {
echo 'object create';
}
构造函数 输出object create
注释都有,咋不懂了