为了账号安全,请及时绑定邮箱和手机立即绑定

没有完全明白,吼吼!!

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 回答

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

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

4 回复 有任何疑惑可以回复我~
#1

五十岁的灰哥 提问者

非常感谢!it培训这样牛人必不可少
2016-10-22 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

构造函数 输出object create

0 回复 有任何疑惑可以回复我~

注释都有,咋不懂了

0 回复 有任何疑惑可以回复我~
#1

五十岁的灰哥 提问者

对于小白来说是咋看都不会懂滴
2016-10-22 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PHP进阶篇
  • 参与学习       181826    人
  • 解答问题       2577    个

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

进入课程

没有完全明白,吼吼!!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信