没有完全明白,吼吼!!

来源:2-7 PHP类和对象之访问控制

五十岁的灰哥

2016-10-21 22:05

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(); //通过静态方法来获得一个实例

写回答 关注

6回答

  • 为何学开发
    2016-10-22 21:41:08
    已采纳

    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的意义就在于此,实现单例功能。

    常用于框架底层一些服务型的类,只需实例一次,或只能被实例一次的情况。

    五十岁的灰哥

    非常感谢!it培训这样牛人必不可少

    2016-10-22 21:54:45

    共 1 条回复 >

  • 五十岁的灰哥
    2016-10-22 08:40:50

    哪位大神能不怕麻烦,给每一句都注释一下。

  • 五十岁的灰哥
    2016-10-22 08:39:34

     public static function getInstance() {  //声明一个公有的静态方法  这个方法的名字牛B,也是唬人的
           if (empty(self::$_object)) {  //判断类本身里面(self::,静态不用$this->)刚才的那个$_object是(否)为空。如果为真-----》执行下面的方法
               self::$_object = new Car(); // 实例化,也就是创建对象?内部方法可以调用私有方法,因此这里可以创建对象
           }
           return self::$_object; //如果已经存在,就返回。。。这里不懂了
       }
    }

  • 五十岁的灰哥
    2016-10-22 08:33:18

    private static $_object = null; 声明一个私有的静态变量?这里$_object 命名是唬人的吗?用下划线给小白冲击太大了

  • 五十岁的灰哥
    2016-10-22 08:30:53

      private function __construct() {
           echo 'object create';
       }

    构造函数 输出object create

  • 不愿透露姓氏的王帅哥
    2016-10-21 22:41:58

    注释都有,咋不懂了

    五十岁的灰哥

    对于小白来说是咋看都不会懂滴

    2016-10-22 08:29:06

    共 1 条回复 >

PHP进阶篇

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

181836 学习 · 2577 问题

查看课程

相似问题