使用PHP中的静态属性和方法进行OOP编程的示例

12j*_*erk 1 php oop static

我目前是PHP OOP编程的初学者,并且想知道是否有人可以提供一个如何使用静态属性和方法在实际Web应用程序中有用的示例.

Jan*_*nen 5

虽然静态问题可能会出现问题中指出的问题,但它们确实有一些用途.

我发现非常有用的一个是"命名构造函数".

通常,类会有一个构造函数.但是,如果可以通过几种不同的方式初始化课程呢?

例如,您的应用程序可能支持使用电子邮件地址或Facebook用户ID创建用户...

class User {
    public function __construct($emailOrFbUserId) { } 
}
Run Code Online (Sandbox Code Playgroud)

正如您在上面所看到的,当您使用该类时,构造函数中的参数可能会有点混乱.

相反,通过这样写...

class User {
    private function __construct() { }

    public static function fromEmailAddress($email) {
        $user = new User();

        //assuming there's a private field called email
        $user->email = $email;
        return $user
    }

    public static function fromFacebookUserId($id) {
        ...
    }
}

//usage example
$user = User::fromEmailAddress('foo@bar.com');
Run Code Online (Sandbox Code Playgroud)

......它突然变得更有意义了.

  • @DavideGualano有趣的想法,但几十年的OOP说工厂方法应该是他们创建的类中的静态方法.具有单独的类会导致各种问题,例如,您的工厂将无法访问私有或受保护的属性.创建子类也会变得非常复杂,尤其是在您拥有子类的子类之后.它违背了一般的"复杂代码是错误代码"理论. (2认同)