前面学过,每次用 new 类名 的方式,就可以创建一个对象。我们必须禁止外部程序用 new 类名的方式来创建多个实例。
解决办法是:我们将构造函数设置成 private ,让构造函数只能在内部被调用,而外部不能调用。这样,这个类就不能被外部用 new 的方式建立多个实例了。
以下是不能被外部用new实例化的类。
<?
class A{
private function __construct(){}
}
$a = new A();
?>
程序运行结果为:
Fatal error: Call to private A::__construct() from invalid context in E:\PHPProjects\test.php on line 6
我们已经禁止外部用new实例化这个类,我们改如何让用户访问这个类呢?前门堵了,我们需要给用户留个后门。
解决办法是:static 修饰的方法,可以不经实例化一个类就可以直接访问这个方法。
<?
class A{
private function __construct(){}
static function getClassA(){
return "这里是后门,可以通过这里进入类内部..";
}
}