一个大部分是静态的PHP类是否可以在其内部实例化为';好';练习?

一个大部分是静态的PHP类是否可以在其内部实例化为';好';练习?,php,class,static,instantiation,Php,Class,Static,Instantiation,我正在审阅我的一位同事编写的一些代码,我正试图对他的设计进行思考。看起来他们有一个主要是静态的类,但有一个私有构造函数方法。在类中,有一些方法可以从同一个类构造新对象。这被认为是一种“好”的做法吗?或者这是一种上课的方式 以下是抽象代码: class ABC { static public $PROP1 = 'car'; static public $PROP2 = 'blue'; static public $PROP3 = 'apple'; static p

我正在审阅我的一位同事编写的一些代码,我正试图对他的设计进行思考。看起来他们有一个主要是静态的类,但有一个私有构造函数方法。在类中,有一些方法可以从同一个类构造新对象。这被认为是一种“好”的做法吗?或者这是一种上课的方式

以下是抽象代码:

class ABC
{
    static public $PROP1 = 'car';
    static public $PROP2 = 'blue';
    static public $PROP3 = 'apple';

    static public function method1($arg)
    {
        return new ABC($arg, true);
    }

    private function __construct($arg, $isFlag = false)
    {
        //Do stuff
    }
}

谢谢你的帮助

是否正常取决于类的用途


无论如何,您所描述的体系结构有时用于不同的目的。该模式是这种实践的一个很好的应用

这似乎就是所谓的工厂模式

如果将构造函数声明为私有,则不能直接实例化该类。 必须使用公共静态方法才能使用此类


图案真的很棒!您应该阅读一些关于它们的内容。

这种单例模式使您能够更好地控制在整个程序中表达类的方式

假设您只想实例化同一类的5个对象,那么您可以使用静态方法中的计数器轻松实现这一点


这有时被称为“工厂模式”,因为您会注意到您管理实例(产品)创建的方式。

如果您有一系列对象共享其大部分状态,那么这可能是一种明智的方法。我无法想象一种情况,尽管仅仅将共享状态抽象到它自己的对象中并将其注入到每个新实例中并不是更好。在我看来,公共统计几乎和全球统计一样邪恶。

首先想到的是工厂模式+1到@schautdaular,我也相信
newdb(
应该是
newabc)(
。这样做的好处是,您可以将此静态函数引用作为其他函数的参数传递hanks@RichardMarskell-Drackir,这是正确的。在抽象=]@Oddant时忘了更改它,您也可以使用实例方法进行此操作。感谢您提供的答案。选择此答案而不是@Oddant,因为它触及我的问题,并进一步提供资源。再次感谢!