class Singleton{
protected function __construct()
{
echo 2;
}
}
$test = new Singleton();
Fatal error: Call to protected Singleton::__construct() from invalid context
Fatal error: Call to private Singleton::__construct() from invalid context
必须要用public才行,protected & private 都会出现这个问题。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
只有
public修饰的方法才可以在类的外部访问,protected方法和private方法只能在类中访问,区别在与protected方法可以在子类中访问而private方法不可以。一般情况下构造函数都是
public的,这样就可以在类的外部通过new ClassName()的方式实例化类。如果构造函数是
private或者protected修饰的,此时一般用来实现单例模式,具体代码如下:你是不是在别的地方调用
Singleton这个类了,并且还实例化,才出现的这个错误!构造方法也和普通方法一样,遵循访问控制的规则。new的时候,会自动调用构造方法。但是 $test = new Singleton();是在类外部调用的,当然不行咯。
补充一下,构造方法的可见性是根据自己的需求来定义的。并不是说不能用private 或者protected。比如题主明显是为了实现单例模式,那么这时候构造函数就只能用private,达到防止被外部实例化的目的。而protected是可以被子类访问的。
楼主,类的构造方法不能使用proceted的哦,想知道结果,看看下面的代码再运行看试试
https://www.bytelang.com/o/s/...
protected 或者 private 会导致这个类无法被实例化
__construct是构造函数,构造函数是在实例对象后立即运行的,是在类外运行了!所以声明为private及protected时,再实例对象就出错了!