php - 构造函数不可以私有化吗?
天蓬老师
天蓬老师 2017-04-11 09:47:00
[PHP讨论组]

这个为什么会报错?

a=4;
  }
}
$obj =new A();
echo $obj->a;
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
大家讲道理

构造函数私有化后,不能再使用 new 外部调用,私有方法只能类内部使用。

可以这样:

<?php
class A {
  public $a = 2;

  private function __construct(){
      $this->a=4;
  }

  public static function createInstance() {
      return new A();
  }
}

$obj = A::createInstance();
天蓬老师

可以私有,私有后不能在类以外用new创建。

<?php
class A{
  public $a=2;
  private function __construct(){
      $this->a=4;
  }
  public static function newA() {
      return new A(); // new static;
  }
}
$obj = A::newA();
echo $obj->a;
高洛峰

类中的方法修饰符没有限制,修饰符是在非类内部直接调用时生效,private 只能在类内部访问,实例化对象(new)的时候,会调用构造方法,但调用时发现构造方法修饰符为 private,不能在外部直接访问,所以报错,如果构造方法被私有化(private),就不能再使用 new 关键字,需要在类中写一个静态方法,因为静态方法调用不会走构造方法,再在静态方法中调用构造函数即可,此过程为“单例模式”的核心逻辑

天蓬老师

这里有大量的构造函数的文章,你可以看看

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号