他们的方式很好。还有其他一些事情可以让你的生活更轻松,你也可以做。
-
不要对类名进行硬编码。如果您使用的是 5.3+,请使用关键字 static
。这样,如果扩展该类,则新函数也可以实例化该类:
public static function bar($var) {
$obj = new static();
$obj->var = $var;
return $obj;
}
然后,您可以在任何扩展类中使用它,而无需重写任何内容。
-
弄清楚是否应该通过构造函数传入,而不是在构造后设置。如果对象依赖于它,则应需要它。$var
public function __construct($var) {
$this->var = $var;
}
这样,如果不设置变量,就无法实例化对象。
-
通过静态方法强制实施类的实例化。如果你正在其中执行任何需要执行的操作,请将构造函数设置为受保护或私有。这样,某人就无法绕过静态方法。
protected function __construct() {}
private function __construct() {}
我希望这有帮助...
编辑:根据您上面的评论,在我看来,您似乎在尝试实现单例设计模式。关于为什么这不是一个好主意以及它可能做的坏事,有大量的信息。它也有用途。
但是还有其他一些模式可能对你有用,这取决于你到底在做什么。
- 如果您尝试使用相同的步骤创建不同的对象,则可以使用工厂方法。
- 如果所有对象开始时都相同,然后进行了自定义,则可以使用原型模式。
- 如果创建对象的成本特别高,则可以使用对象池。
但是需要考虑的一件事是,在PHP中,对象的重量非常轻。不要试图避免仅仅为了这个开销而创建新对象。避免多次执行数据库查询或文件系统访问等繁重操作。但是不要担心调用,除非 的构造函数特别重...new Foo()
foo