如果我们将构造函数定义成了私有方法,则无法直接实例化对象,因为私有方法不允许在外部调用,这时候我们往往通过静态方法来实现实例化,在设计模式中会经常使用这样的方法来控制对象的生成,著名的单例模式就是只允许存在一个全局唯一的对象。
<?php
class Car {
private function __construct() {
echo 'object create <br>';
}
private static $_object = 0;
public static function getInstance()
{
if (self::$_object<=2)
{
self::$_object +=1 ;
return new Car(); //内部方法可以调用私有方法,因此这里可以创建对象
}
}
}
//$car = new Car(); //这里不允许直接实例化对象
$car1 = Car::getInstance(); //通过静态方法来获得一个实例
$car2=Car::getInstance();
$car3=Car::getInstance();
$car4=Car::getInstance();
?>
这里使用变量$_object来控制生成的实例的数量,上面的程序中只会生成三个实例,因此输出三行object create
object create
object create
object create