帮助静态类成员

时间:2009-10-18 13:01:10

标签: php

我一直在课堂上使用$ this。现在我必须使用静态类,我迷路了。有人可以告诉我如何将其转换为使用静态成员吗​​?我试过看一些教程,但不容易理解。我也不知道如何“实例化”静态类,所以如果有人可以提供一个例子,我将不胜感激。

感谢。

class db
{
    private static $instance;
    private static $database_name;
    private static $database_user;
    private static $database_pass;
    private static $database_host;
    private static $database_link;

    private function db()
    {
        self::$database_name = "name";
        self::$database_user = "user";
        self::$database_pass = "password";
        self::$database_host = "host";
    }

    public static function getInstance()
    {
        if (!self::$instance)
        {
           ?????

          self::$instance = connect();
          return self::$database_link;
        }
        return self::$instance;
    }

    function dbLink()
    {
      self::$connect();
      return self::$database_link;
    }
...

编辑:

另外,我真的很好奇使用静态类而不是可以在类外使用的类成员。我会假设安全,但就是这样。

1 个答案:

答案 0 :(得分:2)

对于singleton,您只能将getInstance()方法设为静态。

关键是使构造函数成为私有的,这样除了在getInstance()之外的任何地方都不能构造类;来自手册:

<?php
class Example
{
    // Hold an instance of the class
    private static $instance;

    // A private constructor; prevents direct creation of object
    private function __construct() 
    {
        echo 'I am constructed';
    }

    // The singleton method
    public static function singleton() 
    {
        if (!isset(self::$instance)) {
            $c = __CLASS__;
            self::$instance = new $c;
        }

        return self::$instance;
    }

    // Example method
    public function bark()
    {
        echo 'Woof!';
    }

    // Prevent users to clone the instance
    public function __clone()
    {
        trigger_error('Clone is not allowed.', E_USER_ERROR);
    }

}

?>

单例模式确保您只有一个东西 - 例如数据库连接 - 创建起来可能很昂贵。

你的实例是这样的:

$myInstance = Example::getInstance();

此实例是常规对象 - 您可以正常(非静态)访问方法:

$myInstance->bark();