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

public static function getInstance() { 这里可以不用静态方法吗?

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

正在回答

2 回答

这里必须用静态方法,如果是非静态方法的话必须通过将类实例化成一个对象后才能够调用,而这里的构造函数又被设置成private权限,无法在外部直接实例化,所以必须设置为静态才能实现代码的功能。

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

new新的开始 提问者

public $_object = null; public function getInstance() { if (empty($this -> _object)) { $this -> _object = new Car(); 可以这么来吗
2017-02-14 回复 有任何疑惑可以回复我~
#2

new新的开始 提问者

非常感谢!
2017-02-20 回复 有任何疑惑可以回复我~
#3

懒惰的马仔3724683

是因为静态方法不需要实力化,所以才这么生成一个对象吗?
2017-02-28 回复 有任何疑惑可以回复我~

$car = Car::getInstance() 这个语句是调用静态方法的,你这么设置就没法调用了

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

new新的开始 提问者

$car = Car->getInstance(); 这样呢。。
2017-02-15 回复 有任何疑惑可以回复我~
#2

ANARKHH 回复 new新的开始 提问者

Car是一个类的名称不是对象的名称,所以不能用->符号
2017-02-16 回复 有任何疑惑可以回复我~
#3

new新的开始 提问者 回复 ANARKHH

$c =$car ->getInstance(); 应该是这样的。这样行吗。
2017-02-16 回复 有任何疑惑可以回复我~
#4

new新的开始 提问者 回复 ANARKHH

哦。。搞明白了。原来这个是构造函数。。没注意看清楚 。构造是不能new的。。谢谢你啦。
2017-02-16 回复 有任何疑惑可以回复我~
#5

ANARKHH 回复 new新的开始 提问者

你这么设置的话就一定要先实例化$car,然而这个类的构造函数是private权限,你没有办法在外部直接实例化这个对象,所以根本没办法创建$car这个对象,所以这种情况也是不存在的。
2017-02-17 回复 有任何疑惑可以回复我~
#6

会喷火的大怪龙 回复 new新的开始 提问者

那你这个$car又是哪里来的
2017-05-05 回复 有任何疑惑可以回复我~
查看3条回复

举报

0/150
提交
取消

public static function getInstance() { 这里可以不用静态方法吗?

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